Помощь по попыткам / исключениям Python - PullRequest
2 голосов
/ 11 мая 2011

Я пытаюсь поддерживать повторение, когда пользователь вводит имя файла, а затем вводит два целых числа.Так что, если возникнет исключение, я хочу, чтобы пользователю снова предложили ввод.

Моя проблема в том, что если введен правильный файл, но введено неверное целое число, он запросит файл снова, а не просто целое число.Как я могу исправить код, чтобы он снова запросил целое число.

Вот что у меня есть:

while True:
    try:
        f = raw_input("Enter name of file: ")
        inFile = open(f)
        # more code
    except IOError:
        print ("The file does not exist. Try Again.")        
    else:    
        try:
            integer = int(raw_input("Enter an integer: "))
            integer2 = int(raw_input("Enter an integer: "))
            # more code
        except (TypeError, ValueError):
            print ("Not an integer. Try Again.")

Ответы [ 4 ]

9 голосов
/ 11 мая 2011

Попробуйте использовать несколько while петель:

while True:
    fileName = raw_input("Enter name of file: ")
    try:
        # more code here to detect or open the file
        break
    except Exception:  # can be IOError or something else
        print ("error msg")

while True:
    try:
        integer = int(raw_input("Enter an integer: "))
        integer2 = int(raw_input("Enter an integer: "))
        break
    except (TypeError, ValueError):
        print ("error msg")

# more code
0 голосов
/ 13 февраля 2014

Чтобы расширить ответ выше относительно использования нескольких циклов while и связанный с этим вопрос об обработке дополнительной проверки данных без необходимости циклически повторять уже проверенные данные, приведенное ниже выглядит не совсем точно, но дает вам детальный анализ, которого вы хотите достичь:

while True:
    fileName = raw_input("Enter name of file: ")
    try:
        # more code here to detect or open the file
        break
    except Exception:
        print ("The file does not exist. Try Again.")

while True:
    try:
        integer = int(raw_input("Enter an integer: "))
        break
    except (TypeError, ValueError):
        print ("Not an integer. Try Again.")

while True:
    try:
        integer2 = int(raw_input("Enter an integer: "))
        break
    except(TypeError, ValueError):
        print ("Not an integer. Try Again.")
0 голосов
/ 11 мая 2011
>>> def ask(question, func, exceptions):
...     while True:
...         try:
...             return func(raw_input(question))
...         except exceptions, error:
...             pass
... 
>>> x = ask("integer?", int, ValueError)
integer?o
integer?l
integer?42
>>> x
42
0 голосов
/ 11 мая 2011
while True:
    try:
        a = int(raw_input('a: '))
        b = int(raw_input('b: '))
        break
    except ValueError:
        print "Numbers idiot"
#more code here

Этот код перейдет к блоку кроме на a или b и продолжит работу с кодом, если числа сработают.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...