2013-06-17 114 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'> 

イムをそのコードを取得しようとしています。 e.reason.codeを成功させようとしましたが、何を試していいのかわかりません。

+0

ええ - 私はそれを誤読したかもしれません - 'e.reason [0] ['code']'はどうでしょうか? –

+0

トレースバック(最新の呼び出しの最後): 印刷e.reasonで ファイル "descargar.py"、ライン70、[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はprintステートメントを '__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

物事はe.api_codeを使用するために、今のように正しい答えは2013年以来、かなり変更されています。

2

エラーコードだけを取得するには、monq postedメソッドを使用します。次の例は、エラーコードとメッセージの両方を取得する方法を示しています。 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
    は、要求のAPIを使用して、いくつかの方法で処理することができ、フルRequests.response object返します。

あなたのニーズに最も適したものを使用してください。

+1

ありがとうございます。私は狂った笑に行っていたドキュメントは本当に時代遅れです –

関連する問題