Подтвердить что ты не робот

Получить код ошибки из экземпляра исключения tweepy

Я новичок в 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 без успеха, и я понятия не имею, что попробовать.

4b9b3361

Ответ 1

Как насчет этого?

except tweepy.TweepError as e:
    print e.message[0]['code']  # prints 34
    print e.args[0][0]['code']  # prints 34

Ответ 2

Каждое исключение с хорошим поведением, полученное из базового класса исключений , имеет атрибут 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'.

Ответ 3

С 2013 года ситуация сильно изменилась. Правильный ответ на данный момент заключается в использовании e.api_code.

Ответ 4

Чтобы получить только код ошибки, используйте метод 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))

Ответ 5

Вот как я это делаю:

except tweepy.TweepError as e:
    print e.response.status