On 12/2/2012 12:25 PM, Roy Smith wrote:
This is kind of weird (Python 2.7.3):
try:
print "hello"
except foo:
print "foo"
prints "hello". The problem (IMHO) is that apparently the except clause
doesn't get evaluated until after some exception is caught. Which means
it never notices that foo is not defined until it's too late.
This just came up in some code, where I was trying to catch a very rare
exception. When the exception finally happened, I discovered that I had
a typo in the except clause (I had mis-spelled the name of the
exception). So, instead of getting some useful information, I got an
AttributeError :-(
You would have the same problem if you spelled the exception name right
but misspelled a name in the corresponding block. This is PyLint,
PyChecker, xxx territory.
Note that proper checking requires execution of imports.
import mymod
try: pass
except mymod.MymogException: pass # whoops
Is this a bug, or intended behavior? It seems to me it would be much
more useful (if slightly more expensive) to evaluate the names of the
exceptions in the expect clause before running the try block.
'try:' is very cheap. Searching ahead any checking names in all the
except clauses would be much more expensive -- and useless after the
first time the code is run after being revised.
--
Terry Jan Reedy
--
http://mail.python.org/mailman/listinfo/python-list