Как напечатать сообщение об ошибке в Python?



try:
something here
except:
print 'the whatever error occurred.'


Как я могу напечатать ошибку в моем except: блок?

1480   6  

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

    Ничего не найдено.