web-dev-qa-db-ja.com

tweepy例外インスタンスからエラーコードを取得します

pythonを初めて使用し、ライブラリを使用しようとしています。例外が発生し、どれを識別しようとしています。これが私が試していることです。

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を試しましたが成功しませんでしたが、何を試すべきかわかりません。

15
José D.

これはどう?

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

基本のExceptionクラスから派生したすべての正常に動作する例外 has その例外に渡される引数を含むargs属性(タイプTuple)。 Tweepyは、エラーコードとメッセージを含むタイプList[dict]の構造を、そのタプルの最初の要素として格納します。

次のコードを使用して、エラーコード(タイプint)とエラーメッセージ(タイプstr)を取得できます。

e.args[0][0]['code']
e.args[0][0]['message']

TweepError例外クラス は、いくつかの追加の有用な属性api_codereason、およびresponseも提供します。それらは 文書化されていません パブリックAPIの一部であるにもかかわらず、何らかの理由でです。

したがって、次のコードを使用してエラーコード(タイプint)を取得できます。

e.api_code


歴史:

以前はe.message[0]['code']を使用してエラーコードにアクセスしていましたが、機能しなくなりました。 message属性は Python 2.6 で非推奨になり、Python 3.0で削除されました。現在、エラーが発生します'TweepError' object has no attribute 'message'

10
Jeyekomon

2013年以降、状況は大きく変化しました。現時点での正解は、e.api_codeを使用することです。

9
monq

エラーコードだけを取得するには、monqpostedメソッドを使用します。次の例は、エラーコードとメッセージの両方を取得する方法を示しています。 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))
2
DowntownDev

これが私がそれをする方法です:

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