6 ответов:
для Python 2.6 и более поздних версий и Python 3.x:
except Exception as e: print(e)для Python 2.5 и более ранних версий используйте:
except Exception,e: print str(e)
The
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 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, и, возможно, это лучший способ, но я думал, что выброшу это там.
Comments