Как исправить исключение ошибки, чтобы разрешить повторные попытки без зацикливания исключений в Python - PullRequest
0 голосов
/ 29 марта 2019

Я пытаюсь написать обработку ошибок в Python 2.7 для случая, когда возникает исключение IOError после того, как пользователь вводит имя файла.

Я попробовал несколько наших решений в Интернете, включая:

Как повторить попытку после исключения? Получить оператор Try для циклического повторения до получения правильного значения

Это мой оригинальный код:

while True: 
    try:
        with open (userFile, 'r') as txtFile:
            for curLine in txtFile:
                curLine = curLine.rstrip("\n\r")
                idList.append(curLine)
    except IOError:
        print("File does not exist")

Всякий раз, когда возникает исключение IOError, оно входит в бесконечный цикл, печатая «Файл не существует» снова и снова. В случае, когда я ограничиваю попытки добавлением диапазона, он проходит через этот диапазон, печатает снова и снова и затем выходит из сценария. У кого-нибудь есть идея, почему это продолжает работать, когда возникает исключение?

1 Ответ

1 голос
/ 29 марта 2019

Это будет намного легче, если вы разделите отдельные задачи на функции, то есть (i) предупредите пользователя, если файл не существует, и (ii) прочитаете содержимое файла в список строк:

def read_file(f):
    # you can't read a file line-by-line and get line endings that match '\n\r'
    # the following will match what your code is trying to do, but perhaps not 
    # what you want to accomplish..?
    return f.read().split("\n\r")  # are you sure you haven't switched these..?

def checked_read_file(fname):
    try:
        with open(fname, 'rb') as fp:  # you'll probably need binary mode to read \r
            return read_file(fp)
    except IOError:
        print("File does not exist")
        return False

тогда вы можете написать свой цикл while:

while True:
    result = checked_read_file(user_file)
    if result is not False:  # this is correct since the empty list is false-y
        break
    user_file = input("Enter another filename: ")  # or user_file = raw_input("...: ") if you're on Python 2

# here result is an array of lines from the file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...