ねえ、
時々503 httpステータスを与えるsoapリソース(http://chemspell.nlm.nih.gov/axis/SpellAid.jws?wsdl)にアクセスするスクリプトを書いています(数1000クエリの後...)
その後、suds.client モジュールが不特定の例外でクラッシュします。この例外は、try except ステートメントでキャッチできますが、実際の 503 http ステータスについてこの例外をテストできませんでした。
したがって、この問題をキャッチするためのコードは、現在次のようになっています。
for i in range(9):
try:
result = client.service.getSugList(query, 'All databases')
success = True
break
except urllib2.URLError, e:
pass
except Exception, e:
if e[0] == 503:
print "e[0] == 503"
if 503 in e:
print "503 in e"
if e is (503, u'Service Temporarily Unavailable'):
print "e is (503, u'Service Temporarily Unavailable')"
if e == (503, u'Service Temporarily Unavailable'):
print "e == (503, u'Service Temporarily Unavailable')"
raise ChemSpellException, \
"Uncaught exception raised by suds.client: %s" % e
if success is False:
raise ChemSpellException, \
"Got too many timeouts or 503 errors from ChemSpell web service."
次の出力が得られます。
No handlers could be found for logger "suds.client"
Traceback (most recent call last):
File "./scripts/chembl_chemspell_synonyms.py", line 49, in <module>
synonyms_unique = chemspell.get_synonyms_list(value)
File "/net/netfile2/ag-russell/bq_ppucholt/hd-analytics/PyHDA/sources/chemspell.py", line 82, in get_synonyms_list
chemspell_syns = get_synonyms(syn)
File "/net/netfile2/ag-russell/bq_ppucholt/hd-analytics/PyHDA/sources/chemspell.py", line 45, in get_synonyms
"Uncaught exception raised by suds.client: %s" % e
PyHDA.sources.chemspell.ChemSpellException: Uncaught exception raised by suds.client: (503, u'Service Temporarily Unavailable')
そのため、if 句のどれも例外を検出できず、具体的にキャッチするために次に何をすべきかわかりません。サーバー側に依存しているため、定期的に失敗する最小限の例を提供することは困難であり、この例外は、スクリプトが継続的に実行されると 1 日 1 回のようにポップアップします。他に提供できる情報はありますか? どの if 句をテストすればよいか分かりますか?
乾杯、パスカル