2013-06-17 10 views
12

Python'a yeni yaşıyorum ve bir kütüphane kullanmaya çalışıyorum. Bir istisna ortaya çıkarır ve hangisini tanımlamaya çalışıyorum.Hata kodunu alın tweepy istisna örneği

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

Bu alıyorum budur:

[{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 o koda almaya çalışırken bu deniyorum budur. E.reason.code'u hiç başarı ile denedim ve denemem için hiçbir fikrim yok.

+0

Evet - Bunu yanlış yorumlayabilirdim - e.reason [0] ['code'] 'nedir? –

+0

traceback (son En son çağrı): Dosya "descargar.py", satır 70, baskı e.reason içinde [0] [ 'kod'] TypeError: string endeksleri olmalıdır tamsayılar –

+0

Maalesef bu @alecxe oldu bir süre önce, ne yaptığımı hatırlamıyorum, ama ben (istediğim gibi) kodu aldım. Yine de, cevabınız işe yarıyor, bu yüzden kabul ediyorum :) –

cevap

13

Bu nasıl? İşte

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

Bana öyle geliyor ki, “e” bir liste nesnesi olduğundan, “e.message [0] ['code']' işe yaramaz. Bunun yerine "e [0] ['code']'? –

+0

Aslında, şimdi github sayfasına bakıyorum, tweepError baskı ifadesini '__str__' ile geçersiz kılıyor, bu yüzden sorun yaşıyorum olabilir. Nasıl yapılandırıldığını biliyor musun? –

+2

Bu artık çalışmıyor. Lütfen cevabımı gör. – kmario23

-2

ben böyle yaparız:

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

Tweepy hata kodu yazıyor mu (bu durumda 34)? – alecxe

+0

Evet, bir hata durumunda sunucu tarafından hangi HTTP durum kodu döndürülüyorsa yazdırılır. – tmatti

+0

Ancak, 34 bir yanıt durum kodu burada değil, bir twitter hata kodu. – alecxe

7

şeyler e.api_code kullanmak bugün itibariyle Doğru cevap 2013 yılından bu yana biraz değişti.

2

Sadece hata kodunu almak için, yayınlanan posta kodu yöntemini kullanın. Aşağıdaki örnek, hem hata kodunu hem de iletiyi nasıl alacağınızı göstermektedir. İletiyi almak için daha iyi bir yöntem varsa, e.reason dizesinden iletiyi ayıklamak zorunda kaldım.

Not: Bu kod, aşağıdaki biçimde herhangi bir hata kodu/nedeni için çalışmalıdır.

[{ 'kod': 50, 'mesajı': 'bulunamadı Kullanıcı'}]

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 

Ve şöyle diyebilirsiniz:

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

Bu durum 2018'den itibaren

e.message[0]['code'] artık çalışmıyor. Hala in the documentation belirtiliyor, ancak dokümanlar güncel değil ve sorun zaten been reported. Şu anda bir hata 'TweepError' object has no attribute 'message' olsun.

  • e.api_code
    basit kod değerini döndürür (sınıf int):

    buldum birkaç çalışma çözümler vardır
    34

  • e.reason kodu ve mesaj (sınıf str) içeren
    İade metni:
    [{'code': 34, 'message': 'Sorry, that page does not exist.'}]
  • e.args[0][0]['code']
    e.args[0][0]['message']
    Sırasıyla basit bir kod değeri (sınıf int) ve basit bir ileti (sınıf str) döndürür.
    34
    Sorry, that page does not exist.
  • e.response
    sonra İstekler API kullanarak çeşitli şekillerde ele alınabilir tam Requests.response object döndürür.

Gereksinimlerinize en uygun olanını kullanın.

+1

Bunun için teşekkürler. Çıldırıyordum lol Dokümanlar gerçekten modası geçmiş –