Как напечатать ошибку в Python?
try:
something here
except:
print 'the whatever error occurred.'
Как я могу напечатать ошибку в my except:
блок?
6 ответов
для Python 2.6 и более поздних версий и Python 3.x:
except Exception as e: print(e)
для Python 2.5 и более ранних версий используйте:
except Exception,e: print str(e)
на traceback
модуль предоставляет методы для форматирование и печать исключений и их трассировки, например, это будет печатать исключение, как это делает обработчик по умолчанию:
import traceback
try:
1/0
except Exception:
traceback.print_exc()
выход:
Traceback (most recent call last):
File "C:\scripts\divide_by_zero.py", line 4, in <module>
1/0
ZeroDivisionError: division by zero
на Python 2.6 или больше это немного чище:
except Exception as e: print(e)
в более старых версиях это все еще вполне читаемо:
except Exception, e: print e
Если вы хотите передать строки ошибок, вот пример из ошибки и исключения (Python 2.6)
>>> try:
... raise Exception('spam', 'eggs')
... except Exception as inst:
... print type(inst) # the exception instance
... print inst.args # arguments stored in .args
... print inst # __str__ allows args to printed directly
... x, y = inst # __getitem__ allows args to be unpacked directly
... print 'x =', x
... print 'y =', y
...
<type 'exceptions.Exception'>
('spam', 'eggs')
('spam', 'eggs')
x = spam
y = eggs
одно повышение ошибки лайнера может быть сделано с утверждениями assert, если это то, что вы хотите сделать. Это поможет вам написать статически фиксируемый код и проверить ошибки на ранней стадии.
assert type(A) is type(""), "requires a string"
(Я собирался оставить это как комментарий к ответу @jldupont, но у меня недостаточно репутации.)
Я видел ответы, такие как ответ @jldupont в других местах. FWIW, я думаю, что важно отметить, что это:
except Exception as e:
print(e)
напечатает вывод ошибки в sys.stdout
по умолчанию. Более подходящим подходом к обработке ошибок в целом было бы:
except Exception as e:
print(e, file=sys.stderr)
(обратите внимание, что вы должны import sys
для этого, чтобы работать.) Таким образом, ошибка печатается к STDERR
вместо STDOUT
, что позволяет правильно анализировать/перенаправлять / и т. д. Я понимаю, что вопрос был строго о "печати ошибки", но кажется важным указать на лучшую практику здесь, а не оставлять эту деталь, которая может привести к нестандартному коду для тех, кто в конечном итоге не учится лучше.
Я не использовал тег traceback
модуль, как в ответе Cat Plus Plus, и, возможно, это лучший способ, но я думал, что выброшу это там.