在python中,我有处理异常并打印错误代码和消息的代码。
try:
somecode() #raises NameError
except Exception as e:
print('Error! Code: {c}, Message, {m}'.format(c = e.code, m = str(e))
但是,e.code
不是获取错误名称(NameError)的正确方法,我找不到答案。我如何得到错误代码?
答案 0 :(得分:3)
试试这个:
try:
somecode() #raises NameError
except Exception as e:
print('Error! Code: {c}, Message, {m}'.format(c = type(e).__name__, m = str(e)))
请阅读this以获取更详细的说明。
答案 1 :(得分:1)
您的问题尚不清楚,但是据我了解,您不想查找错误的名称(NameError
),而是查找错误代码。这是怎么做。首先,运行此:
try:
# here, run some version of your code that you know will fail, for instance:
this_variable_does_not_exist_so_this_code_will_fail
except Exception as e:
print(dir(e))
您现在可以看到e
中的内容。您将得到如下内容:
['__cause__', '__class__', '__context__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setstate__', '__sizeof__', '__str__', '__subclasshook__', '__suppress_context__', '__traceback__', 'args', 'with_traceback']
此列表将包含特殊方法(__x__
内容),但结尾处不带下划线。您可以一一尝试它们,找到想要的东西,像这样:
try:
# here, run some version of your code that you know will fail, for instance:
this_variable_does_not_exist_so_this_code_will_fail
except Exception as e:
print(e.args)
print(e.with_traceback)
对于这种特定错误,print(e.args)
是最接近错误代码的地方,它将输出("name 'this_variable_does_not_exist_so_this_code_will_fail' is not defined",)
。
在这种情况下,只有两件事可以尝试,但是在您的情况下,您的错误可能还有更多。例如,在我的案例中,一个Tweepy错误是,列表为:
['__cause__', '__class__', '__context__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setstate__', '__sizeof__', '__str__', '__subclasshook__', '__suppress_context__', '__traceback__', '__weakref__', 'api_code', 'args', 'reason', 'response', 'with_traceback']
我最后五次尝试了一次。我从print(e.args)
得到([{'code': 187, 'message': 'Status is a duplicate.'}],)
,从print(e.api_code)
得到187
。因此我发现e.args[0][0]["code"]
或e.api_code
都会给我我要搜索的错误代码。
答案 2 :(得分:0)
答案 3 :(得分:0)
由于它返回了字典的元组的元组的对象,我们可以将代码提取为
try:
pass
except Exception as e:
print(e[0][0]['code'] + e[0][0]['message'])