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を試しましたが成功しませんでしたが、何を試すべきかわかりません。
これはどう?
except tweepy.TweepError as e:
print e.message[0]['code'] # prints 34
print e.args[0][0]['code'] # prints 34
基本のExceptionクラスから派生したすべての正常に動作する例外 has その例外に渡される引数を含むargs
属性(タイプTuple
)。 Tweepyは、エラーコードとメッセージを含むタイプList[dict]
の構造を、そのタプルの最初の要素として格納します。
次のコードを使用して、エラーコード(タイプint
)とエラーメッセージ(タイプstr
)を取得できます。
e.args[0][0]['code']
e.args[0][0]['message']
TweepError例外クラス は、いくつかの追加の有用な属性api_code
、reason
、およびresponse
も提供します。それらは 文書化されていません パブリックAPIの一部であるにもかかわらず、何らかの理由でです。
したがって、次のコードを使用してエラーコード(タイプint
)を取得できます。
e.api_code
以前はe.message[0]['code']
を使用してエラーコードにアクセスしていましたが、機能しなくなりました。 message
属性は Python 2.6 で非推奨になり、Python 3.0で削除されました。現在、エラーが発生します'TweepError' object has no attribute 'message'
。
2013年以降、状況は大きく変化しました。現時点での正解は、e.api_code
を使用することです。
エラーコードだけを取得するには、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))
これが私がそれをする方法です:
except tweepy.TweepError as e:
print e.response.status