Ответ 1
Как насчет этого?
except tweepy.TweepError as e:
print e.message[0]['code'] # prints 34
print e.args[0][0]['code'] # prints 34
Я новичок в python, и я пытаюсь использовать библиотеку. Это вызывает исключение, и я пытаюсь определить, какой из них. Это то, что я пытаюсь:
except tweepy.TweepError as e:
print e
print type(e)
print e.__dict__
print e.reason
print type(e.reason)
Это то, что я получаю:
[{u'message': u'Sorry, that page does not exist', u'code': 34}]
<class 'tweepy.error.TweepError'>
{'reason': u"[{u'message': u'Sorry, that page does not exist', u'code': 34}]", 'response': <httplib.HTTPResponse instance at 0x00000000029CEAC8>}
[{u'message': u'Sorry, that page does not exist', u'code': 34}]
<type 'unicode'>
Я пытаюсь добраться до этого кода. Я пробовал e.reason.code без успеха, и я понятия не имею, что попробовать.
Как насчет этого?
except tweepy.TweepError as e:
print e.message[0]['code'] # prints 34
print e.args[0][0]['code'] # prints 34
Каждое исключение с хорошим поведением, полученное из базового класса исключений , имеет атрибут args
(типа tuple
), который содержит аргументы, переданные этому исключению. В большинстве случаев только один аргумент передается исключению, и к нему можно получить доступ с помощью args[0]
.
Аргумент, который Tweepy передает своим исключениям, имеет структуру типа List[dict]
. Вы можете получить код ошибки (тип int
) и сообщение об ошибке (тип str
) из аргумента, используя этот код:
e.args[0][0]['code']
e.args[0][0]['message']
Класс исключений TweepError также предоставляет несколько дополнительных полезных атрибутов api_code
, reason
и response
. По какой-то причине они не документированы, хотя они являются частью общедоступного API.
Таким образом, вы можете получить код ошибки (введите int
), также используя этот код:
e.api_code
К коду ошибки обращались с помощью e.message[0]['code']
, который больше не работает. Атрибут message
был исключен из в Python 2.6 и удален в Python 3.0. В настоящее время вы получаете ошибку 'TweepError' object has no attribute 'message'
.
С 2013 года ситуация сильно изменилась. Правильный ответ на данный момент заключается в использовании e.api_code
.
Чтобы получить только код ошибки, используйте метод monq, отправленный. В следующем примере показано, как получить код ошибки и сообщение. Мне пришлось извлечь сообщение из строки e.reason, если у кого-то есть лучший способ получить только сообщение, пожалуйста, поделитесь.
Примечание. Этот код должен работать для любого кода ошибки/причины в следующем формате.
[{'code': 50, 'message': 'Пользователь не найден.'}]
def getExceptionMessage(msg):
words = msg.split(' ')
errorMsg = ""
for index, word in enumerate(words):
if index not in [0,1,2]:
errorMsg = errorMsg + ' ' + word
errorMsg = errorMsg.rstrip("\'}]")
errorMsg = errorMsg.lstrip(" \'")
return errorMsg
И вы можете называть его так:
try:
# Some tweepy api call, ex) api.get_user(screen_name = usrScreenName)
except tweepy.TweepError as e:
print (e.api_code)
print (getExceptionMessage(e.reason))
Вот как я это делаю:
except tweepy.TweepError as e:
print e.response.status