1

ねえ、

時々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 句をテストすればよいか分かりますか?

乾杯、パスカル

4

2 に答える 2

1
    if e[0] == 503:

例外が添字可能であることを発見しました、ありがとう。

    if e is (503, u'Service Temporarily Unavailable'):

同一性演算子 (「is」) と等価演算子 (「==」) を混同しているようです。

    if e == (503, u'Service Temporarily Unavailable'):

例外はタプルではなく例外です

    raise ChemSpellException, \
          "Uncaught exception raised by suds.client: %s" % e

この行がないと、例外の種類と完全なトレースバックを含む適切なエラー メッセージが表示されます。

于 2012-05-31T15:55:31.113 に答える