Как я могу перебрать файл и вызвать пользовательское исключение, если не хватает ввода? - PullRequest
0 голосов
/ 08 апреля 2020

Я следил за книгой "Python для чайников", и есть один пример, который не распечатывает результат, как я ожидал.

class Error(Exception):
    pass
class NotEnoughStuffError(Error):
    pass
try:
    thefile = open('people.csv')
    line_count = len(thefile.readlines())
    if line_count < 2:
        raise NotEnoughStuffError
except NotEnoughStuffError:
    print('Not Enough Stuff')
except FileNotFoundError:
    print('File not found')
    thefile.close()
else:
    for line in thefile:
        print(line)
    thefile.close()
    print('Success!')

Вопрос 1: Когда он печатает, он должен показать все строки из файла. Тем не менее, это только печатает «Успех!» Почему содержимое файла не было напечатано?

Вопрос 2. Я заменил код:

class Error(Exception):
    pass
class NotEnoughStuffError(Error):
    pass

на

class NotEnoughStuffError(Exception):
    pass

Они возвращают одинаковый результат? Является ли исключение встроенным классом в Python?

1 Ответ

0 голосов
/ 08 апреля 2020

Проблема в том, что вы использовали readlines(), и он переместил указатель на конец файла, а когда вы позже используете for line in thefile:, он пытается прочитать с конца файла. И он ничего не читает с конца файла и ничего не отображает.

Вы бы получили список со строками для переменной

 all_lines = thefile.readlines()
 line_count = len(all_lines)

и позже использовали бы этот список

 for line in all_lines:
    print(line)

Или вам пришлось бы переместить указатель на начало файла прежде чем пытаться снова прочитать данные

 thefile.seek(0)

 for line in thefile:
    print(line)
...