sixohsix の Twitter Wrapper for Pythonを使用して、API からツイートを繰り返し (1 時間ごとに) フェッチする小さなスクリプトがあります。Twitter API から発生するすべてのエラー、つまりすべての 5xx および 4xx のものではないにしても、ほとんどの処理に成功しています。
それにもかかわらず、以下のエラー トレースバックをランダムに観察します (2 ~ 3 日に 1 回のみ)。つまり、プログラムが終了し、トレースバックがシェルに表示されます。これが何を意味するのかはわかりませんが、ほとんどの場合正しく実行されることが証明されているため、スクリプトの動作とは直接関係がないと思います。
これは、スクリプトでラッパーの関数を呼び出す場所です。
KW = {
'count': 200, # number of tweets to fetch (fetch maximum)
'user_id' : tweeter['user_id'],
'include_rts': 'false', # do not include native RT's
'trim_user' : 'true',
}
timeline = tw.twitter_request(tw_endpoint,\
tw_endpoint.statuses.user_timeline, KW)
この関数tw.twitter_request(tw_endpoint, tw_endpoint.statuses.user_timeline, KW)
は基本的に を実行しreturn tw_endpoint.statuses_user_timeline(**args)
、ここで にargs
変換されKW
、tw_endpoint
sixohsix のライブラリの使用から取得された OAuthorized エンドポイントです
return twitter.Twitter(domain='api.twitter.com', api_version='1.1',
auth=twitter.oauth.OAuth(access_token, access_token_secret,
consumer_key, consumer_secret))
これはトレースバックです:
Traceback (most recent call last):
File "search_twitter_entities.py", line 166, in <module>
tw_endpoint.statuses.user_timeline, KW)
File "/home/tg/mild/twitter_utils.py", line 171, in twitter_request
return twitter_function(**args)
File "build/bdist.linux-x86_64/egg/twitter/api.py", line 173, in __call__
File "build/bdist.linux-x86_64/egg/twitter/api.py", line 177, in _handle_response
File "/usr/lib/python2.7/urllib2.py", line 126, in urlopen
return _opener.open(url, data, timeout)
File "/usr/lib/python2.7/urllib2.py", line 400, in open
response = self._open(req, data)
File "/usr/lib/python2.7/urllib2.py", line 418, in _open
'_open', req)
File "/usr/lib/python2.7/urllib2.py", line 378, in _call_chain
result = func(*args)
File "/usr/lib/python2.7/urllib2.py", line 1215, in https_open
return self.do_open(httplib.HTTPSConnection, req)
File "/usr/lib/python2.7/urllib2.py", line 1180, in do_open
r = h.getresponse(buffering=True)
File "/usr/lib/python2.7/httplib.py", line 1030, in getresponse
response.begin()
File "/usr/lib/python2.7/httplib.py", line 407, in begin
version, status, reason = self._read_status()
File "/usr/lib/python2.7/httplib.py", line 371, in _read_status
raise BadStatusLine(line)
httplib.BadStatusLine: ''
そのトレースバックから得られる唯一のことは、エラーが別の Python ライブラリの奥深くで発生し、Twitter API またはラッパーからの無効な HTTP 統計に関係しているということです...しかし、私が言ったように、おそらくあなたの一部はこれをデバッグ/解決する方法についてのヒントを得ることができます。スクリプトを定期的にチェックして再起動し、ツイートを取得し続ける必要があるのはかなり面倒だからです。
EDIT : これを少し明確にするために、トレースバックの最初の 2 つの関数は、既に try-except ブロックにあります。たとえば、ファイル "twitter_utils.py" の try-except-Block は、40x および 50x の例外を除外しますが、except:
. 私が理解していないのは、エラーがこの位置でキャッチされず、代わりにプログラムが強制終了され、トレースバックが出力される理由です。簡単に言えば、PHP スクリプトの解析エラーのように、エラーをキャッチできない状況にあります。では、どうすればよいでしょうか?