is parameter an iterable?
Steven D'Aprano
steve at REMOVETHIScyber.com.au
Wed Nov 16 16:35:19 EST 2005
On Wed, 16 Nov 2005 09:06:01 -0500, Rick Wotnaz wrote:
[cutting to the important bit]
>> except TypeError, msg:
>> if msg == "iteration over non-sequence":
>> # handle non-iterable case
> Does this in fact work on your system? On mine (2.4.1 (#65, Mar 30
> 2005, 09:13:57) [MSC v.1310 32 bit (Intel)]), it doesn't seem to.
Dammit, that will teach me not to test my code before posting.
No it doesn't: msg is an object of type exceptions.TypeError.
The easy fix is to just coerce it to a string:
if str(msg) == "iteration over non-sequence":
which *does* work on my system. But perhaps a better way is to do this:
# Create an instance of the exception you expect:
try:
for i in 0:
pass
except TypeError, ITER_OVER_NON_SEQ:
pass
# Now run your code...
try:
...blah blah blah...
except TypeError, msg
if str(msg) == str(ITER_OVER_NON_SEQ):
...blah blah blah...
This means we're no longer assuming what the error message will be,
which makes our code a lot more future-proof and implementation-proof: if
some version of Python changes the error string from "iteration over
non-sequence" to something else, the code should continue to work
correctly.
--
Steven.
More information about the Python-list
mailing list