Steve Holden wrote:
vincent wehren wrote:

rbt wrote:

If I have a Python list that I'm iterating over and one of the objects in the list raises an exception and I have code like this:

try:
    do something to object in list
except Exception:
    pass

Does the code just skip the bad object and continue with the other objects in the list, or does it stop?

Thanks



Fire up a shell and try:

 >>> seq = ["1", "2", "a", "4", "5", 6.0]
 >>> for elem in seq:
....     try:
....        print int(elem)
....     except ValueError:
....        pass


and see what happens...

--
Vincent Wehren


I suspect the more recent versions of Python allow a much more elegant solution. I can't remember precisely when we were allowed to use continue in an except suite, but I know we couldn't in Python 2.1.

Nowadays you can write:

Python 2.4 (#1, Dec  4 2004, 20:10:33)
[GCC 3.3.3 (cygwin special)] on cygwin
Type "help", "copyright", "credits" or "license" for more information.
 >>> for i in [1, 2, 3]:
 ...   try:
 ...     print i
 ...     if i == 2: raise AttributeError, "Bugger!"
 ...   except AttributeError:
 ...     print "Caught exception"
 ...     continue
 ...
1
2
Caught exception
3
 >>>

To terminate the loop on the exception you would use "break" instead of "continue".

What do you mean by a more elegant solution to the problem? I thought the question was if a well-handled exception would allow the iteration to continue with the next object or that it would stop. Why would you want to use the continue statement when in the above case that is obviously unnecessary?:


$ python
Python 2.4 (#1, Dec  4 2004, 20:10:33)
[GCC 3.3.3 (cygwin special)] on cygwin
Type "help", "copyright", "credits" or "license" for more information.
>>> for i in [1,2,3]:
...     try:
...         if i == 2: raise AttributeError, "Darn!"
...     except AttributeError:
...         print "Caught Exception"
...
1
2
Caught Exception
3
>>>

Or do you mean that using "continue" is more elegant than using "pass" if there are no other statements in the except block?


Regards, -- Vincent Wehren

regards Steve
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to