2013-06-17 17 views
12

Jestem nowy dla Pythona i próbuję użyć biblioteki. Podnosi wyjątek i próbuję go zidentyfikować. To, co próbuję:Pobierz kod błędu z wystąpienia wyjątku tweepy

except tweepy.TweepError as e: 
    print e 
    print type(e) 
    print e.__dict__ 
    print e.reason 
    print type(e.reason) 

to co otrzymuję:

[{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 próbuje dostać się do tego kodu. Próbowałem e.reason.code bez powodzenia i nie mam pojęcia, co spróbować.

+0

Tak, mogłem źle odczytać ten jeden - a co z 'e.reason [0] ['code']'? –

+0

Traceback (najnowsza wezwanie ostatni): Plik "descargar.py", linia 70, w druku e.reason [0] [ 'kod'] TypeError: indeksy łańcuchowe muszą być liczbami całkowitymi –

+0

@alecxe Niestety, było to jakiś czas temu nie pamiętam, co zrobiłem, ale dostałem kod (tak jak chciałem). Niemniej jednak twoja odpowiedź działa, więc ją akceptuję :) –

Odpowiedz

13

Co powiesz na to?

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

Wydaje mi się, że skoro 'e' jest obiektem listy, to' e.message [0] ['code'] 'nie zadziała. Czy zamiast tego użyłbyś 'e [0] ['code']'? –

+0

Właściwie teraz, gdy patrzę na stronę github, tweepError zastępuje instrukcję print za pomocą '__str__', więc być może dlatego mam problemy. Czy wiesz, jak wygląda struktura "e"? –

+2

To już nie działa. Proszę zobaczyć moją odpowiedź. – kmario23

-2

Oto jak to zrobić: od 2013 Prawidłowa odpowiedź już teraz jest użycie e.api_code

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

Czy to naprawdę drukuje kod błędu tweepy (w tym przypadku 34)? – alecxe

+0

Tak, drukuje, w zależności od tego, który kod statusu HTTP jest zwracany przez serwer w przypadku błędu. – tmatti

+0

Ale 34 to nie jest kod stanu odpowiedzi, to kod błędu twitter. – alecxe

7

Rzeczy zmieniły się całkiem sporo.

2

Aby uzyskać tylko kod błędu, należy skorzystać z opublikowanej metody. Poniższy przykład ilustruje, jak uzyskać kod błędu i komunikat. Musiałem wyodrębnić wiadomość z łańcucha e.reason, jeśli ktoś ma lepszą metodę, aby pobrać tylko wiadomość, proszę udostępnij.

Uwaga: ten kod powinien działać w przypadku dowolnego kodu/przyczyny błędu w następującym formacie.

[{ 'Kod': 50 'wiadomość': 'Użytkownik nie znaleziono'}]

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 

I można nazwać tak:

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

Jest to sytuacja od 2018:

e.message[0]['code'] nie działa. Nadal jest odnotowywany jako in the documentation, ale dokumenty są nieaktualne, a problem ma już numer been reported. Obecnie pojawia się błąd 'TweepError' object has no attribute 'message'.

Istnieje kilka rozwiązań pracujących Znalazłem:

  • e.api_code
    Zwraca prostą wartość kodu (klasa int):
    34
  • e.reason
    Zwraca tekst zawierający kod i komunikat (klasa str):
    [{'code': 34, 'message': 'Sorry, that page does not exist.'}]
  • e.args[0][0]['code']
    e.args[0][0]['message']
    Powoduje zwrócenie prostej wartości kodu (klasa int) i prostej wiadomości (klasa str) odpowiednio.
    34
    Sorry, that page does not exist.
  • e.response
    Zwraca pełny Requests.response object które następnie mogą być obsługiwane przez kilka sposobów, z wykorzystaniem wniosków API.

Użyj tego, który najlepiej odpowiada twoim potrzebom.

+1

Dziękuję za to. Szaleję lol Dokumenty są naprawdę nieaktualne –

Powiązane problemy