2013-06-17 11 views
12

Sono nuovo in Python e sto cercando di utilizzare una libreria. Solleva un'eccezione e sto cercando di identificare quale. Questo è quello che sto cercando:Ottieni il codice di errore dall'istanza di eccezione tweepy

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

Questo è quello che sto ottenendo:

[{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 cercando di arrivare a quel codice. Ho provato e.reason.code senza successo e non ho idea di cosa provare.

+0

Sì, potrei avere frainteso quello - Che dire di 'e.reason [0] ['codice']'? –

+0

traceback (chiamata più recente scorso): file "descargar.py", linea 70, in e.reason stampa [0] [ 'code'] TypeError: indici di stringa devono essere interi –

+0

@alecxe Siamo spiacenti, questo è stato qualche tempo fa, non ricordo cosa ho fatto, ma ho ottenuto il codice (come volevo). Tuttavia, la tua risposta funziona, quindi l'ho accettata :) –

risposta

13

Che ne dici di questo?

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

Mi sembra che poiché 'e' è un oggetto lista, che' e.message [0] ['code'] 'non funzionerebbe. Non dovresti invece usare 'e [0] ['code']'? –

+0

In realtà, ora che guardo la pagina github, tweepError sta sovrascrivendo l'istruzione print con '__str__', quindi potrebbe essere il motivo per cui ho riscontrato problemi. Ti capita di sapere come 'e' è strutturato? –

+2

Questo non funziona più. Per favore vedi la mia risposta. – kmario23

-2

Ecco come lo faccio:

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

Stampa veramente il codice dell'errore tweepy (34 in questo caso)? – alecxe

+0

Sì, stampa qualsiasi codice di stato HTTP restituito dal server in caso di errore. – tmatti

+0

Ma, 34 non è un codice di stato di risposta qui, è un codice di errore di Twitter. – alecxe

7

Le cose sono cambiate un bel po 'dal 2013. La risposta corretta sin d'ora è di usare e.api_code.

2

Per ottenere solo il codice di errore, utilizzare il metodo monq pubblicato. Il seguente esempio illustra come ottenere sia il codice di errore che il messaggio. Ho dovuto estrarre il messaggio dalla stringa e.reason, se qualcuno ha un metodo migliore per recuperare solo il messaggio, per favore condividi.

Nota: questo codice dovrebbe funzionare per qualsiasi codice di errore/motivo con il seguente formato.

[{ 'codice': 50, 'messaggio': 'Utente non trovato'}]

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 

E si può chiamare in questo modo:

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

questa è la situazione a partire dal 2018:

e.message[0]['code'] non funziona più. Si è ancora notato in the documentation ma i documenti non sono aggiornati e il problema è già been reported. Attualmente ricevi un errore 'TweepError' object has no attribute 'message'.

Ci sono diverse soluzioni di lavoro che ho trovato:

  • e.api_code
    Restituisce un valore semplice codice (classe int):
    34
  • e.reason
    Restituisce il testo contenente il codice e il messaggio (classe str):
    [{'code': 34, 'message': 'Sorry, that page does not exist.'}]
  • e.args[0][0]['code']
    e.args[0][0]['message']
    Restituisce un valore di codice semplice (classe int) e un messaggio semplice (classe str), rispettivamente.
    34
    Sorry, that page does not exist.
  • e.response
    Restituisce un completo Requests.response object che può essere poi gestito da diversi modi utilizzando l'API richieste.

Utilizzare quello che si adatta alle vostre esigenze il meglio.

+1

Grazie per questo. Stavo diventando pazzo lol I documenti sono davvero superati –

Problemi correlati