Tôi có một lệnh trong một điều khoản thử mà tôi biết ném một ngoại lệ. Tôi đang cố gắng nắm bắt nó trong một mệnh đề "ngoại trừ", nhưng điều khoản ngoại trừ dường như không nhận ra sự tồn tại của ngoại lệ. Trường hợp ngoại lệ, khi unhandled (tức là không được bao bọc trong một điều khoản thử), trông như thế này trong cửa sổ tương tác:ngoại lệ python không được nhận dạng; làm thế nào để xử lý với ngoại trừ?
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
những khi tôi đặt các lệnh trong một thử/trừ xây dựng trong file đầu tiên trong danh sách đó, "actions.py", như thế này:
try:
annotation=annotator.ncbo_annotate(thing)
except HTTPError:
...do some things with this
tôi mong rằng mệnh đề trên sẽ bắt "HTTPError: Lỗi HTTP 500: Lỗi máy chủ nội bộ" được tạo ra khi tôi chạy chức năng ncbo_annotate, nhưng thay vào đó khi tôi chạy ở trên, tôi gặp lỗi khi nói rằng tên toàn cục "HTTPError" không được xác định:
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
Vậy thỏa thuận là gì? Tôi nghĩ rằng python tăng ngoại lệ cho đến khi nó tìm thấy một handler trong một điều khoản try hoặc spits nó ra unhandled. Tại sao mã của tôi không có ý tưởng gì về HTTPError, hay cách khác, làm thế nào để tôi biết nó là gì để nó có thể xử lý nó?
Một điều bạn có thể làm là đặt trước HTTPError gian tên của nó, bằng văn bản cho except theo cách này: 'trừ urllib2.HTTPError:' – gerlos