在Python中獲取異常值



2 Answers

使用repr()和使用repr和str之間的區別

使用repr:

>>> try:
...     print x
... except Exception, e:
...     print repr(e)
... 
NameError("name 'x' is not defined",)
>>> 

使用str:

>>> 
>>> try:
...     print x
... except Exception, e:
...     print str(e)
... 
name 'x' is not defined
>>> 
>>> 
Question

如果我有這樣的代碼:

try:
    some_method()
except Exception,e:

我怎樣才能得到這個異常值(我的意思是字符串表示)?

謝謝




還沒有給出另一種方式:

try:
    1/0
except Exception, e:
    print e.message

輸出:

integer division or modulo by zero

args[0]實際上可能不是一條消息。

str(e)可能會返回帶有周圍引號的字符串,如果是unicode,可能會返回字符串u

'integer division or modulo by zero'

repr(e)給出了完全的例外表示,這可能不是你想要的:

"ZeroDivisionError('integer division or modulo by zero',)"

編輯

我的錯 !!! 看起來, BaseException.message 2.6 BaseException.message 已被棄用 ,最後,它似乎仍然沒有一種標準化的方式來顯示異常消息。 所以我想最好是根據你的需要來處理e.argsstr(e) (如果你使用的lib依賴於這個機制,可能還需要e.message )。

例如,使用pygraphvize.message是正確顯示異常的唯一方式,使用str(e)將用u''包圍消息。

但對於MySQLdb ,檢索消息的正確方法是e.args[1]e.message是空的, str(e)將顯示'(ERR_CODE, "ERR_MSG")'




如果您不知道錯誤的類型/來源,則可以嘗試:

import sys
try:
    doSomethingWrongHere()
except:
    print('Error: {}'.format(sys.exc_info()[0]))

但請注意,你會得到pep8警告:

[W] PEP 8 (E722): do not use bare except



Related