Ответ 1
try:
1 / 0
except Exception as e:
print e
Я даже не знаю, какие слова нужно искать. Я хочу отображать части объекта ошибки в блоке except (аналогично объекту err в VBScript, который имеет Err.Number и Err.Description). Например, я хочу показать значения моих переменных, а затем показать точную ошибку. Понятно, что я вызываю ошибку "по очереди" ниже, но как я могу напечатать этот факт?
try:
x = 0
y = 1
z = y / x
z = z + 1
print "z=%d" % (z)
except:
print "Values at Exception: x=%d y=%d " % (x,y)
print "The error was on line ..."
print "The reason for the error was ..."
try:
1 / 0
except Exception as e:
print e
Если вы ожидаете ошибку DivideByZero, вы можете поймать эту конкретную ошибку
import traceback
try:
x = 5
y = 0
print x/y
except ZeroDivisionError:
print "Error Dividing %d/%d" % (x,y)
traceback.print_exc()
except:
print "A non-ZeroDivisionError occurred"
Вы можете вручную получить номер строки и другую информацию, вызвав traceback.print_exc()
Строковое значение объекта исключения даст вам причину. Модуль traceback
позволит вам получить доступ к полной трассировке.
Лучше использовать стандартный модуль регистрации Python.
import sys, traceback, logging
logging.basicConfig(level=logging.ERROR)
try:
x = 0
y = 1
z = y / x
z = z + 1
print "z=%d" % (z)
except:
logging.exception("Values at Exception: x=%d y=%d " % (x,y))
Это приводит к следующему выводу:
ERROR:root:Values at Exception: x=0 y=1
Traceback (most recent call last):
File "py_exceptions.py", line 8, in <module>
z = y / x
ZeroDivisionError: integer division or modulo by zero
Преимущество использования модуля журналирования состоит в том, что у вас есть доступ ко всем модным обработчикам журналов (системный журнал, электронная почта, журнал вращающихся файлов), что удобно, если вы хотите, чтобы ваше исключение регистрировалось по нескольким адресатам.
Другими словами,
try:
1/0
except Exception as e:
print e
Вы можете получить информацию на страницах руководства, связанных Игнасио в его ответе.
Если вы делаете
except AssertionError as error:
print(error)
тогда это должно вывести из строя вашу программу с трассировкой и всем, как если бы не было попытки/кроме. Но без необходимости менять отступы и комментировать строки.