14

Как напечатать исключение в Python?

16

Заголовок: Как напечатать ошибку/исключение в блоке except:?

Текст проблемы: Я пытаюсь поймать исключение в блоке except: и вывести его на экран. Однако, когда я пишу код следующим образом:

try:
    ...
except:
    print(exception)

Я получаю ошибку, потому что переменная exception не определена. Как я могу правильно отобразить текст ошибки или исключения внутри блока except?

5 ответ(ов)

19

Для Python 2.6 и более поздних версий, а также Python 3.x вы можете использовать следующий синтаксис для обработки исключений:

except Exception as e:
    print(e)

Для Python 2.5 и более ранних версий используйте:

except Exception, e:
    print str(e)

Этот подход позволяет вам корректно обрабатывать исключения и выводить сообщения об ошибках в разных версиях Python.

2

В Python 2.6 и выше код выглядит немного чище:

except Exception as e: print(e)

В более старых версиях код также остается достаточно читаемым:

except Exception, e: print e

В любом случае, старайтесь обрабатывать исключения корректно и не забывайте про отладочную информацию!

0

Вы можете использовать следующий однострочник для обработки исключений, который включает информацию о типе ошибки и месте её возникновения:

try:
    1/0
except Exception as e:
    print(f"{type(e).__name__} на строке {e.__traceback__.tb_lineno} в файле {__file__}: {e}")

Вывод будет следующим:

ZeroDivisionError на строке 48 в файле /Users/.../script.py: division by zero

Этот код позволяет не только поймать исключение, но и вывести полезные сведения, такие как тип ошибки и номер строки, что может значительно упростить отладку вашего кода.

0

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

Полная трассировка

Как уже упоминалось другими пользователями, вы можете поймать полную трассировку с помощью модуля traceback. Например:

import traceback
try:
    with open("not_existing_file.txt", 'r') as text:
        pass
except Exception as exception:
    traceback.print_exc()

Этот код выдаст следующий вывод:

Traceback (most recent call last):
  File "exception_checks.py", line 19, in <module>
    with open("not_existing_file.txt", 'r') as text:
FileNotFoundError: [Errno 2] No such file or directory: 'not_existing_file.txt'

Также вы можете зафиксировать трассировку, используя модуль logging:

import logging

logger = logging.getLogger()
logging.basicConfig(level=logging.ERROR)

try:
    with open("not_existing_file.txt", 'r') as text:
        pass
except Exception as exception:
    logger.error(exception, exc_info=True)

Вывод будет следующим:

__main__: 2020-05-27 12:10:47-ERROR- [Errno 2] No such file or directory: 'not_existing_file.txt'
Traceback (most recent call last):
  File "exception_checks.py", line 27, in <module>
    with open("not_existing_file.txt", 'r') as text:
FileNotFoundError: [Errno 2] No such file or directory: 'not_existing_file.txt'

Сообщение об ошибке

Если вас не интересует полная трассировка, а нужны только основные сведения, такие как название исключения и сообщение об ошибке, вы можете использовать следующий код:

try:
    with open("not_existing_file.txt", 'r') as text:
        pass
except Exception as exception:
    print("Exception: {}".format(type(exception).__name__))
    print("Exception message: {}".format(exception))

Этот код выведет:

Exception: FileNotFoundError
Exception message: [Errno 2] No such file or directory: 'not_existing_file.txt'

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

0

Попробуйте следующий код:

try:
    print("Харе Кришна!")
except Exception as er:
    print(er)

Этот фрагмент кода пытается вывести строку "Харе Кришна!". Если произойдет какая-либо ошибка, она будет перехвачена, и описание ошибки будет выведено на экран.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь