buggy python interpretter or am I missing something here?

Gary Herron gary.herron at islandtraining.com
Mon Jan 27 02:03:51 EST 2014


On 01/26/2014 10:17 PM, me wrote:
> On Sun, 26 Jan 2014 21:04:57 -0800, Gary Herron wrote:
>
>> Never *ever* have a bare except like that.  If it gets invoked, you have
>> no idea why.   A simple typo like ixd instead of idx or a(idx) instead
>> of a[idx] would raise an exception but give you no idea why.
>>
>> Do
>>     try:
>>         ...
>>     except Exception,e:
>>         print e
>> at the absolute minimum.
>> (Python 3 syntax would differ slightly, but the advice is the same.)
>>
>> Perhaps printing a traceback along with the exception would help. Add
>>       traceback.print_exc()
>
> So here's the clencher without debating the merits bare except: since a
> bare catch(...) is totally acceptable in the c++ world.
>
> When I have except: by itself the program fails...but simply adding the
> "except Exception,e: " causes the program to work correctly.

Doubtful.   We've been doing this kind of stuff for decades without 
hitting your supposed bug.  Much more likely is that you've 
misinterpreted the results.  Ii don't know how, but I'm quite confident 
that you have.

Your contention that the raise goes back to the sys.exit() is certainly 
a mis-interpretation also.  The re-raise of the original exception is 
now an uncaught exception, and the interpreter's response to an uncaught 
exception is to kill the program.   Nearly the same result as the 
sys.exit(), but via a different pathway.

>
> To me that signifies an undefined behavior of the python specification,
> or at least bad behavior of the python interpreter I'm using.  If you can
> syntactically use a bare except: without generating an invalid syntax
> error then it should have a well defined and predictable outcome.

It is well defined.  Slow down a bit, rerun your two tests, show is the 
code *and* the results, and we'll get to the bottom of this.

>
> If in fact the "except Exception, e:" is what's required then a bare
> except shouldn't be considered valid syntax at all, right?

Bare excepts are perfectly legal valid syntax and have their uses, 
however it's just extremely dangerous programming to allow a simple typo 
(or any of an infinite number of possible errors) in your try section to 
masquerade as a "error in command line" (to quote your print at that 
point).    Python's dynamic typing makes bare except extremely 
dangerous.  In Python, unlike C, any number of typos can be 
syntactically correct, but meaningless, exception-raising actions at run 
time.  Things like misspelling a variable/function name, substituting a 
comma for a decimal point, indexing something that is not indexable, 
applying a function to the wrong parameters or wrong number of 
parameters, ...  All these are *not* syntax errors (as they would be in 
C), but will cause a run-time exception -- and you'd never know why with 
that bare except blindly catching them all and claiming "command line 
error".

Gary Herron

>
> kind regards




More information about the Python-list mailing list