ffrr
все три ваши функции
user, pazz, maria должны возвращать значение, вместо изменения глобальных переменных
ffrrСмысл функций в том, чтобы 1) сделать код более структурированным 2) использовать код повторно
а почему нельзя использовать глобальные переменные?
def validate_username(username): if len(username) < 3: return False return True def get_username(): username = input('Enter username') return username username = get_username() if not validate_username(username): print 'Error' sys.exit()
username = '' is_valid = None def validate_username(): global username global is_valid if len(username) < 3: is_valid = False else: is_valid = True def get_username(): global username username = input('Enter username') get_username() validate_username() if no tis_valid: print 'Error' sys.exit()
for i in range(3): test += 1 try: user() except pysimplevalidate.ValidationException: print('Reboot-1') except pysimplevalidate.RetryLimitException: print('Reboot-2') dbuser, dbpass = data
for i in range(3): test += 1 try: user() except ValidationException: print('Reboot-1') except RetryLimitException: print('Reboot-2') dbuser, dbpass = data
# ./auth.py ------------------------- <<<<<<<<<Welcome>>>>>>>>> ------------------------- Please enter a username (after 3 unlucky attempts system will reboot) Username (must be 12 numbers): dsgf 'dsgf' is not a number. Username (must be 12 numbers): sf 'sf' is not a number. Username (must be 12 numbers):ggag 'ggag' is not a number. Traceback (most recent call last): File "/storage/.local/lib/python3.8/site-packages/pysimplevalidate/__init__.py", line 512, in validateNum numericValue = int(value) ValueError: invalid literal for int() with base 10: 'ggag' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/storage/.local/lib/python3.8/site-packages/pyinputplus/__init__.py", line 167, in _genericInput possibleNewUserInput = validationFunc( File "/storage/.local/lib/python3.8/site-packages/pyinputplus/__init__.py", line 385, in <lambda> validationFunc = lambda value: pysv.validateNum( File "/storage/.local/lib/python3.8/site-packages/pysimplevalidate/__init__.py", line 514, in validateNum _raiseValidationException(_("%r is not a number.") % (_errstr(value)), excMsg) File "/storage/.local/lib/python3.8/site-packages/pysimplevalidate/__init__.py", line 222, in _raiseValidationException raise ValidationException(str(standardExcMsg)) pysimplevalidate.ValidationException: 'ggag' is not a number. During handling of the above exception, another exception occurred: Traceback (most recent call last): File "./auth.py", line 47, in <module> user() File "./auth.py", line 28, in user username = pyip.inputNum('Username (must be 12 numbers): ', min=111111111111, max=999999999999, limit=3) File "/storage/.local/lib/python3.8/site-packages/pyinputplus/__init__.py", line 398, in inputNum return _genericInput( File "/storage/.local/lib/python3.8/site-packages/pyinputplus/__init__.py", line 188, in _genericInput raise limitOrTimeoutException pyinputplus.RetryLimitException During handling of the above exception, another exception occurred: Traceback (most recent call last): File "./auth.py", line 48, in <module> except pysimplevalidate.ValidationException: NameError: name 'pysimplevalidate' is not defined
import pyinputplus import pysimplevalidate
username = pyinputplus.inputNum('Username (must be 12 numbers): ', min=111111111111, max=999999999999, limit=3)
for i in range(3): def get_username(): username = pyinputplus.inputNum('Username (must be 12 numbers): ', min=111111111111, max=999999999999, limit=3) return username def validate_username(username): if len(username) < 3: return False return True test += 1 try: username = get_username() print(username) except pyinputplus.RetryLimitException: print('Reboot-2') dbuser, dbpass = data print(dbuser) print(username) if username == dbuser : ...........................................
# ./auth.py ------------------------- <<<<<<<<<Welcome>>>>>>>>> ------------------------- Please enter a username (after 3 unlucky attempts system will reboot) Username (must be 12 numbers): db 'db' is not a number. Username (must be 12 numbers): sag 'sag' is not a number. Username (must be 12 numbers): sn 'sn' is not a number. Reboot-2 Traceback (most recent call last): File "./auth.py", line 80, in <module> print(username) NameError: name 'username' is not defined
for i in range(3): def get_username(): username = pyinputplus.inputNum('Username (must be 12 numbers): ', min=111111111111, max=999999999999, limit=3) return username def validate_username(username): if len(username) < 3: return False return True test += 1 try: username = get_username() print(username) except pyinputplus.RetryLimitException: # вот здезь вы присваеваете ‘username’ в рукопашную или еще как либо обрабатываете исключение т.е. обрабатывете тот факт что код в блоке try не работает по причине pyinputplus.RetryLimitException print('Reboot-2') dbuser, dbpass = data print(dbuser) print(username) if username == dbuser : ...........................................