Data validation in python

Validation¶

When we accept user input we need to check that it is valid. This checks to see that it is the sort of data we were expecting. There are two different ways we can check whether data is valid.

Method 1: Use a flag variable. This will initially be set to False . If we establish that we have the correct input then we set the flag to True . We can now use the flag to determine what we do next (for instance, we might repeat some code, or use the flag in an if statement).

Method 2: Use try/except. Here, we try to run a section of code. If it doesn’t work (for instance, we try to convert a string to a number, but it doesn’t contain a number) then we run the except block of code.

Validation technique Meaning
Type check Checking the data type e.g. int, float etc.
Length check Checking the length of a string
Range check Checking if a number entered is between two numbers

Easy example¶

while True: try: age = int(input('How old are you? ')) break except ValueError: print('Please enter a whole number') print('Your age is: ' + str(age)) 
How old are you? asdf Please enter an whole number How old are you? 14.5 Please enter an whole number How old are you? 15 Your age is: 15

This example isn’t easy to understand if it is new to you, but it is the easiest way to ask the user to enter an input and check the input contains an integer.

Читайте также:  Python tornado tcp server

Syntax¶

Using a flag¶

flagName = False while not flagName: if [Do check here]: flagName = True else: print('error message') 

Using an exception¶

while True: try: [run code that might fail here] break except: print('This is the error message if the code fails') print('run the code from here if code is successfully run in the try block of code above') 

Examples¶

Example 1 — Check if input contains digits using a flag¶

validInteger = False while not validInteger: age = input('How old are you? ') if age.isdigit(): validInteger = True else: print('You must enter a valid number') print('You are ' + str(age)) 
How old are you? asdf You must enter a valid number How old are you? 15.0 You must enter a valid number How old are you? 18.2 You must enter a valid number How old are you? -3 You must enter a valid number How old are you? 15 You are 15

This has the same result as the easy example above which makes use of try/except to do the same thing.

This example is fine for checking integers, but will not check floating point numbers or negative numbers. Use try/except to do this — see examples below.

Example 2 — A range and type check using a flag and exception¶

isTeenager = False while not isTeenager: try: age = int(input('How old are you? ')) if age >= 13 and age  19: isTeenager = True except: print('You must enter a valid number between 13 and 19') print('You are a teenager aged ' + str(age)) 
How old are you? asdf You must enter a valid number between 13 and 19 How old are you? -3 How old are you? 15.2 You must enter a valid number between 13 and 19 How old are you? 12 How old are you? 14 You are a teenager aged 14

Example 3 — A length check using a flag¶

isLongEnough = False while not isLongEnough: password = input('Enter password at least 5 characters: ') if len(password) >= 5: isLongEnough = True else: print('Password entered is too short') print('Your password entered is: ' + password) 
Enter password at least 5 characters: asdf Password entered is too short Enter password at least 5 characters: 1234 Password entered is too short Enter password at least 5 characters: ad4fgj Your password entered is: ad4fgj

Example 4 — Multiple validations using a flag¶

isFourDigitPassword = False oldPassword = '2154' while not isFourDigitPassword: password = input('Enter a new PIN: ') if len(password) == 4 and password.isdigit() and password != oldPassword: isFourDigitPassword = True else: print('Your PIN must be 4 digits and not the same as your old PIN') print('Your PIN entered is: ' + password) 
Enter a new PIN: asdf Your PIN must be 4 digits and not the same as your old PIN Enter a new PIN: 2154 Your PIN must be 4 digits and not the same as your old PIN Enter a new PIN: 12345 Your PIN must be 4 digits and not the same as your old PIN Enter a new PIN: 123 Your PIN must be 4 digits and not the same as your old PIN Enter a new PIN: 1234 Your PIN entered is: 1234

Example 5 — Check for a float using an exception¶

while True: try: height = float(input('What is your height in cm? ')) break except ValueError: print('Please enter a number') print('Your height is: ' + str(height)) 
What is your height in cm? 5 foot 4 inches Please enter a number What is your height in cm? 162.5 Your height is: 162.5

Example 6 — A function to get an integer from the user¶

def getInteger(message): while True: try: userInt = int(input(message)) return userInt except ValueError: print('You must enter an integer') age = getInteger('What is your age? ') players = getInteger('How many players in the game? ') 
What is your age? fifteen You must enter an integer What is your age? 15 How many players in the game? two You must enter an integer How many players in the game? 2.2 You must enter an integer How many players in the game? 2

You can reuse this function in your own code as an easy way to get an integer from a user.

Example 7 — A function to get a floating point number from the user¶

def getFloat(message): while True: try: userFloat = float(input(message)) return userFloat except ValueError: print('You must enter a number') height = getFloat('How tall are you? ') print('Your height is: ' + str(height)) 
How tall are you? 1 meter 60 You must enter a number How tall are you? 1.60 Your height is: 1.6

Key points¶

In general we don’t use while True: and break as this can end up creating poor quality code or infinite loops. In the case of try/except, this is acceptable for getting user input and validation.

© Copyright 2017, Axsied Ltd. All rights reserved.

Источник

Оцените статью