Why this exception catch doesn't work?? (python 3)

MRAB python at mrabarnett.plus.com
Tue Apr 20 09:38:20 EDT 2010


Andrej Mitrovic wrote:
> On Apr 20, 1:06 pm, MRAB <pyt... at mrabarnett.plus.com> wrote:
>> Dodo wrote:
>>> Hello,
>>> I don't understand why this won't execute
>>> import urllib.request as u
>>> import socket
>>> socket.setdefaulttimeout(10)
>>> l = "http://img144.imageshack.us/my.php?image=koumakandg8.jpg" #
>>> supposed to timeout
>>> try:
>>>     h = u.urlretrieve(l)
>>> except u.URLError, e: # I tried u.e too, no effect.
>>>     print(e)
>>> except:
>>>     print("other error")
>>> The error :
>>> ...\Python>err.py
>>>   File "...\err.py", line 8
>>>     except u.URLError, e: # I tried u.e too, no effect.
>>>                      ^
>>> SyntaxError: invalid syntax
>> In Python 3 it's:
>>
>>      except u.URLError as e:
>>
>> This a because in Python 2 people sometimes write:
>>
>>      except OSError, IOError:
>>
>> thinking that it will catch both OSError and IOError.
> 
> except (OSError, IOError), e:  # Python 2.x
> 
> If you put them in a tuple, it will catch them, right?

In Python 2.x:

     except (OSError, IOError), e:

In Python 3.x (and also Python 2.6):

     except (OSError, IOError) as e:



More information about the Python-list mailing list