例外をスローすることがわかっているtry句にコマンドがあります。「except」句でキャッチしようとしていますが、except句が例外の存在を認識していないようです。例外は、未処理の場合(つまり、try句で囲まれていない場合)、インタラクティブウィンドウでは次のようになります。
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "C:\Users\Andy\software\Turkeys\actions.py", line 234, in annotate
annotation=annotator.ncbo_annotate(thing)
File "C:\Users\Andy\software\Turkeys\annotator.py", line 49, in ncbo_annotate
fh = urllib2.urlopen(submitUrl, postData)
File "C:\32Python27\lib\urllib2.py", line 126, in urlopen
return _opener.open(url, data, timeout)
File "C:\32Python27\lib\urllib2.py", line 406, in open
response = meth(req, response)
File "C:\32Python27\lib\urllib2.py", line 519, in http_response
'http', request, response, code, msg, hdrs)
File "C:\32Python27\lib\urllib2.py", line 444, in error
return self._call_chain(*args)
File "C:\32Python27\lib\urllib2.py", line 378, in _call_chain
result = func(*args)
File "C:\32Python27\lib\urllib2.py", line 527, in http_error_default
raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
HTTPError: HTTP Error 500: Internal Server Error
そのリストの最初のファイル「actions.py」のtry/except構文にコマンドを入れると次のようになります。
try:
annotation=annotator.ncbo_annotate(thing)
except HTTPError:
...do some things with this
上記の句は、ncbo_annotate関数を実行したときに生成される「HTTPError:HTTP Error 500:Internal Server Error」をキャッチすると予想されますが、代わりに上記を実行すると、グローバル名「HTTPError」が定義されていません:
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "C:\Users\Andy\software\Turkeys\actions.py", line 235, in annotate
except HTTPError:
NameError: global name 'HTTPError' is not defined
それで、取引は何ですか?pythonは、try句内でハンドラーが見つかるか、未処理のまま吐き出すまで例外を発生させると思いました。なぜ私のコードはHTTPErrorが何であるかを知らないのですか、あるいは、それを処理できるようにそれが何であるかをどのように伝えるのですか?