Python从异常

时间:2017-12-09 00:17:34

标签: python exception try-except

在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)的正确方法,我找不到答案。我如何得到错误代码?

4 个答案:

答案 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)

Python异常没有“代码”。

您可以创建一个自定义异常,该异常确实具有名为code的属性,然后您可以根据需要访问并打印该异常。

This答案有一个向自定义异常添加code属性的示例。

答案 3 :(得分:0)

由于它返回了字典的元组的元组的对象,我们可以将代码提取为

try:
  
  pass

except Exception as e:

  print(e[0][0]['code'] + e[0][0]['message'])