Hi,

it seems that urlopen had no context manager for versions < 3. The following code therefore will crash on py2 but not on py3.

from six.moves.urllib.request import urlopen
with urlopen('http://www.google.com') as resp:
    _ = resp.read()

Error:
AttributeError: addinfourl instance has no attribute '__exit__'

I actually wonder if this is not something that the six library should take care of upstream, but in the meantime I could simply do what is suggested on this stackoverflow post:

http://stackoverflow.com/questions/30627937/tracebaclk-attributeerroraddinfourl-instance-has-no-attribute-exit

My question is: why does the python3 version need a "with" block while the python2 version doesn't? Can I skip the "with" entirely, or should I rather do the following:

from six.moves.urllib.request import urlopen

try:
    with urlopen('http://www.google.com') as resp:
        _ = resp.read()
except AttributeError:
    # python 2
    resp = urlopen('http://www.google.com')
    _ = resp.read()

(which is quite ugly).

Thanks!

Fabien



--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to