Проблема в том, что вы используете return
после проверки условия, при котором функция возвращает None
, для этого вам нужно использовать break
вместо return
с циклом while вместо if
.Лучший способ проверки и получения данных - ниже
class ValidationError(Exception):
pass
def validate_and_get_data_count(x):
if int(x) < 0:
raise ValidationError("Cannot be less than 0")
return int(x)
def validate_and_get_data_name(x):
if len(x) < 8:
raise ValidationError("Length of name cannot be less than 8 chars")
elif len(x) > 10:
raise ValidationError("Length of name cannot be greater than 10 chars")
return x
validators = {
"count": validate_and_get_data_count,
"name": validate_and_get_data_name
}
data = {}
params = [
("count","Please enter a count: "),
("name","Please enter a name: "),
]
for param in params:
while True:
x = input(param[1])
try:
data[param[0]] = validators[param[0]](x)
break
except ValidationError as e:
print(e)
print(data)
. То, что делает приведенный выше код, - для каждого param
в params
списке он выполняет проверку цикла while для каждого условия проверки, определенного в его валидаторе, еслидопустимо, он прерывает цикл while и переходит к следующему param
и повторяет тот же процесс снова