Я пишу довольно длинную функцию, которая читает файл CSV, циклически перебирает строки и проверяет их на ожидаемый формат, вызывая исключение, если обнаруживает, что это не тот формат.
Для каждая строка в ожидаемом формате выводит на консоль сообщение (с помощью функции печати) о том, что строка действительна. В противном случае будет выдана ошибка.
Я ожидаю увидеть серию сообщений о том, что первые X строк действительны, за которыми следует исключение, если возникает ошибка, но вместо этого печатается исключение, затем печатает сообщения, несмотря на то, что они были вызваны из предыдущих итераций l oop.
Может кто-нибудь объяснить, почему это так, потому что я не могу обернуть голову вокруг него?
Возьмите этот короткий, базовый c пример, который я создал:
letters = ['a','b','c']
for letter in letters:
if letter == 'a' or letter == 'c':
print ("Valid letter, '" + letter + "' found. Keep going.")
else:
raise Exception("Invalid letter, '" + letter + "' found. Break program.")
Он производит следующий вывод:
>>> >>> ... ... ... ... ... Traceback (most recent call last):
File "<stdin>", line 5, in <module>
Exception: Invalid letter, 'b' found. Break program.
Valid letter, 'a' found. Keep going.
>>>
Я хочу, чтобы сообщения печатались первыми, как они появляются в коде, и исключение, которое будет напечатано в конце, когда код остановлен, в противном случае он теряется среди загрузки печатных сообщений. Кажется, это только для циклов (в том случае, если я что-то печатаю до l oop, он печатается до исключения). Может ли кто-нибудь предложить какое-либо понимание?