Ваш вопрос не ясен, но насколько я понимаю, вы хотите найти не название ошибки (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
дадут мне код ошибки, который я ищу.
person
François M.
schedule
13.11.2020
type(e).__name__
- person Michael Butscher   schedule 09.12.2017e.message
- person user1767754   schedule 09.12.2017print( dir(e) )
, чтобы увидеть, какие поля у вас есть вe
. Каждое исключение может иметь разные поля. - person furas   schedule 09.12.2017