Some HAT...

= Анабар.ru => Python-форумы => Язык программирования Python => сообщение 974
| Вход | Регистрация
нет
фото
Автор:  Scholar
Дата:  5-Sep-2006 23:14 (gmt = -3)
E-mail:  python-src@yandex.ru

RE: Исключение

Как можно в конструкции: try: .... except: .... узнать какое исключение было вызвано и параметры ошибки ?

Для этого нужно воспользоваться функцией из модуля sys: exc_info() -> кортеж (type, value, traceback). А так же можно получить тип и значение исключения по средством следующих имен (тоже из модуля sys): exc_type, exc_value.

Пример 1: (Используем exc_info())

 1  import sys   # Импортируем модуль
 2      try:     # Устанавливаем проверку за возникновением исключения
 3          f = open(r"C:\123.txt", 'r')   # Так как файла с таким именем нет (у меня на компьютере),
 4                                         # возникает икслючение.
 5      except:   # За этим оператором следует код, который будет выполнен в случае
 6                # если исключение возникнет
 7          tip, value, trace = sys.exc_info()   # Сохраняет кортеж в переменные: 
 8                                               # в tip - тип исключения; 
 9                                               # в value - значение, trace - объект трассировки)
10          print tip, value                     # Выводим тип и значение возникшего исключения

После выполнения получаем строку:

1  exceptions.IOError [Errno 2] No such file or directory: 'C:\\123.txt'
2  # "exceptions.IOError" - tip, "[Errno 2] No such file or directory: 'C:\\123.txt" - value
—————————————————————————

Пример 2: (Используем exc_type и exc_value)

1  import sys   # Импортируем модуль
2      try:     # Устанавливаем проверку за возникновением исключения
3          f = open(r"C:\123.txt", 'r')   # Так как файла с таким именем нет (у меня на компьютере), 
4                                         # возникает икслючение.
5      except:   # За этим оператором следует код, который будет выполнен в случае,
6                # если исключение возникнет
7          tip = sys.exc_type; value =  sys.exc_value   # Сохраняет значения из имен exc_type и exc_value в переменные: tip и value.
8          print tip, value                             # Выводим тип и значение возникшего исключения

После выполнения получаем строку:

1  exceptions.IOError [Errno 2] No such file or directory: 'C:\\123.txt'   
2  # "exceptions.IOError" - tip, "[Errno 2] No such file or directory: 'C:\\123.txt" - value
—————————————————————————

В данном случае, результаты одинаковы, но следует иметь ввиду, что глобальные имена модуля sys: exc_value, exc_type созданы для удобства использования и не могут быть полноценной альтернативой функции exc_info(). :-) Ну, это если вдруг кто не заметит разницы Замечания и пожелания по этой статье направлейте на python-src@yandex.ru



все сообщения ветви:

Недостаточно прав для написания ответа
Время генерации страницы в секундах: 1.655