2013-06-17 4 views
12

Я новичок в python, и я пытаюсь использовать библиотеку. Это вызывает исключение, и я пытаюсь определить, какой из них. Это то, что я пытаюсь:Получить код ошибки из экземпляра исключения tweepy

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'> 

Im пытается получить к этому коду. Я пробовал e.reason.code без успеха, и я понятия не имею, что попробовать.

+0

Да, я мог бы неправильно понять, что один - Что относительно 'e.reason [0] ['code']'? –

+0

Обратное прослеживание (самый последний вызов последнего): Файл "descargar.py", строка 70, в печати e.reason [0] [ 'код'] TypeError: строковые индексы должны быть целыми числами –

+0

@alecxe К сожалению, это было некоторое время назад я не помню, что я сделал, но я получил код (как я и хотел). Тем не менее, ваш ответ работает, поэтому я принимаю его :) –

ответ

13

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

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

Мне кажется, что поскольку 'e' является объектом списка, это' e.message [0] ['code'] 'не будет работать. Разве вы не использовали бы 'e [0] ['code']'? –

+0

Фактически, теперь, когда я смотрю на страницу github, tweepError переопределяет оператор печати с помощью '__str__', так что, возможно, поэтому у меня возникли проблемы. Вы знаете, как структурируется 'e'? –

+2

Это больше не работает. Пожалуйста, см. Мой ответ. – kmario23

-2

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

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

Действительно ли он печатает код ошибки tweepy (в данном случае 34)? – alecxe

+0

Да, он печатает какой бы код статуса HTTP не возвращался сервером в случае ошибки. – tmatti

+0

Но, 34 не является кодом статуса ответа здесь, это код ошибки twitter. – alecxe

7

Все изменилось совсем немного, так как 2013. правильный ответ, как сейчас является использование e.api_code.

2

Чтобы получить код ошибки, воспользуйтесь методом monq, размещенным. В следующем примере показано, как получить код ошибки и сообщение. Мне пришлось извлечь сообщение из строки e.reason, если у кого-то есть лучший способ получить только сообщение, пожалуйста, поделитесь.

Примечание: Этот код должен работать для любого кода ошибки/причины в следующем формате.

[{ 'Код': 50, 'сообщение': 'Пользователь не найден'}]

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)) 
1

Это ситуация по состоянию на 2018 год:

e.message[0]['code'] больше не работает. Он по-прежнему отмечен in the documentation, но документы устарели, и проблема уже прошла been reported. В настоящее время вы получите сообщение об ошибке 'TweepError' object has no attribute 'message'.

Есть несколько рабочих решений я нашел:

  • e.api_code
    Возвращает простое значение кода (класс int):
    34
  • e.reason
    Возвращает текст, содержащий код и сообщение (класс str):
    [{'code': 34, 'message': 'Sorry, that page does not exist.'}]
  • e.args[0][0]['code']
    e.args[0][0]['message']
    Возвращает простое значение кода (класс int) и простое сообщение (класс str) соответственно.
    34
    Sorry, that page does not exist.
  • e.response
    Возвращает полный Requests.response object, которые затем могут быть обработаны различными способами с использованием запросов API.

Использовать то, что вам подходит лучше всего.

+1

Благодарим вас за это. Я схожу с ума lol Документы действительно устарели –

Смежные вопросы