Ho un comando in una clausola try che so genera un'eccezione. Sto provando a prenderlo in una clausola "except", ma la clausola except sembra non riconoscere l'esistenza dell'eccezione. L'eccezione, quando non gestita (cioè non racchiusa in una clausola try), si presenta così nella finestra interattiva:eccezione python non riconosciuta; come gestire con tranne?
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
Il quando ho messo il comando in un try/tranne la costruzione nel primo file in tale elenco, "actions.py", in questo modo:
try:
annotation=annotator.ncbo_annotate(thing)
except HTTPError:
...do some things with this
mi aspetterei che la clausola di cui sopra sarebbe prendere il "HTTPError: HTTP Error 500: Internal Server Error" viene riprodotto quando si esegue la funzione ncbo_annotate, ma invece quando ho eseguire quanto sopra, ricevo un errore che dice che il nome globale "HTTPError" non è definito:
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
Quindi qual è l'affare? Ho pensato che Python solleva l'eccezione finché non trova un gestore all'interno di una clausola try o lo sputa non gestito. Perché il mio codice non ha idea di cosa sia un errore HTTPError o, in alternativa, come faccio a sapere cosa è in grado di gestirlo?
Un'altra cosa che puoi fare è mettere prima HTTPError suo namespace, scrivendo la clausola except in questo modo: 'tranne urllib2.HTTPError:' – gerlos