A couple of Python 'Features'

M

Michael Foord

I've come across a couple of 'features' in Python standard libraries -
and I'm not sure if they're meant to be there... or if they're bugs...

One in urllib2 and one in cgi.
Traceback (most recent call last):
File "<pyshell#11>", line 1, in -toplevel-
for entry in i: print entry
File "D:\PYTHON23\lib\rfc822.py", line 390, in __getitem__
return self.dict[name.lower()]
AttributeError: 'int' object has no attribute 'lower'

and in cgi (a result that happens in live CGI as well as interactive
sessions....) :

Traceback (most recent call last):
File "<pyshell#3>", line 1, in ?
for entry in a: print entry
File "C:\PYTHON22\lib\cgi.py", line 550, in __getitem_
raise KeyError,
keyKeyError: 0
You can get round the cgi bug because :
for entry in a.keys(): print entry
works fine - but it's a bit annoying.

(Admittedly my server has python 2.2, but the urllib2 bug occurs in
Python 2.3.4 as well I think).

Regards,


Fuzzy

http://www.voidspace.org.uk/atlantibots/pythonutils.html
 
A

Alex Martelli

Michael Foord said:
I've come across a couple of 'features' in Python standard libraries -
and I'm not sure if they're meant to be there... or if they're bugs...

One in urllib2 and one in cgi.
Traceback (most recent call last):
File "<pyshell#11>", line 1, in -toplevel-
for entry in i: print entry
File "D:\PYTHON23\lib\rfc822.py", line 390, in __getitem__
return self.dict[name.lower()]
AttributeError: 'int' object has no attribute 'lower'

Note that the problem was in rfc822 -- urllib2 was just giving you an
rfc822 message object, which then got erroneously identified as a
sequence in the implicit iter() call in the for statement.
and in cgi (a result that happens in live CGI as well as interactive
sessions....) :


Traceback (most recent call last):
File "<pyshell#3>", line 1, in ?
for entry in a: print entry
File "C:\PYTHON22\lib\cgi.py", line 550, in __getitem_
raise KeyError,
keyKeyError: 0

You can get round the cgi bug because :
for entry in a.keys(): print entry
works fine - but it's a bit annoying.

(Admittedly my server has python 2.2, but the urllib2 bug occurs in
Python 2.3.4 as well I think).

Yes, 2.3 fixed the problem with cgi.fieldstorage (by adding an __iter__
that just returns iter(self.keys())...!-) but even 2.4 alpha 3 still has
the problem with rfc822 (which could and IMHO should be fixed similarly,
returning an iter(self.dict) from the __iter__ method).
If you post the rfc822 bug to the Python bug tracker it can probably get
fixed soon (of course it will need a new 2.3 release to get the fix out,
but at least 2.4 beta 1 won't have the problem any more).


Alex
 
P

Paul McGuire

Michael Foord said:
I've come across a couple of 'features' in Python standard libraries -
and I'm not sure if they're meant to be there... or if they're bugs...

One in urllib2 and one in cgi.
Traceback (most recent call last):
File "<pyshell#11>", line 1, in -toplevel-
for entry in i: print entry
File "D:\PYTHON23\lib\rfc822.py", line 390, in __getitem__
return self.dict[name.lower()]
AttributeError: 'int' object has no attribute 'lower'

and in cgi (a result that happens in live CGI as well as interactive
sessions....) :

Traceback (most recent call last):
File "<pyshell#3>", line 1, in ?
for entry in a: print entry
File "C:\PYTHON22\lib\cgi.py", line 550, in __getitem_
raise KeyError,
keyKeyError: 0
You can get round the cgi bug because :
for entry in a.keys(): print entry
works fine - but it's a bit annoying.

(Admittedly my server has python 2.2, but the urllib2 bug occurs in
Python 2.3.4 as well I think).

Regards,


Fuzzy

http://www.voidspace.org.uk/atlantibots/pythonutils.html

The urllib2 problem looks like a clone of one mentioned earlier in the email
module, which I looked into and reported as bug 1017329. You could add your
example to that, or open a new bug report. But the two should be linked
somehow, as they have the same failure mode, and very likely the same
resolution.

Looking briefly at the cgi module also shows a similar implementation gap,
but I see that FieldStorage implements __iter__, which I thought would be
used in "for entry in a" type iteration, and that failing the existence of
__iter__, then __len__ would be tried with successive calls to __getitem__
from 0 to len-1. What *is* the order of resolution for iterating over a
sequence?

(1015249 was also recently submitted, to address problems with
FieldStorage's __len__ function, should also be linked.)

-- Paul
 
M

Michael Foord

Paul McGuire said:
Michael Foord said:
I've come across a couple of 'features' in Python standard libraries -
and I'm not sure if they're meant to be there... or if they're bugs...

One in urllib2 and one in cgi.
from urllib2 import urlopen
a = urlopen('http://www.voidspace.org.uk')
i = a.info()
for entry in i: print entry
Traceback (most recent call last):
File "<pyshell#11>", line 1, in -toplevel-
for entry in i: print entry
File "D:\PYTHON23\lib\rfc822.py", line 390, in __getitem__
return self.dict[name.lower()]
AttributeError: 'int' object has no attribute 'lower'

and in cgi (a result that happens in live CGI as well as interactive
sessions....) :
import cgi
a = cgi.FieldStorage()
for entry in a: print entry

Traceback (most recent call last):
File "<pyshell#3>", line 1, in ?
for entry in a: print entry
File "C:\PYTHON22\lib\cgi.py", line 550, in __getitem_
raise KeyError,
keyKeyError: 0
You can get round the cgi bug because :
for entry in a.keys(): print entry
works fine - but it's a bit annoying.

(Admittedly my server has python 2.2, but the urllib2 bug occurs in
Python 2.3.4 as well I think).

Regards,


Fuzzy

http://www.voidspace.org.uk/atlantibots/pythonutils.html

The urllib2 problem looks like a clone of one mentioned earlier in the email
module, which I looked into and reported as bug 1017329. You could add your
example to that, or open a new bug report. But the two should be linked
somehow, as they have the same failure mode, and very likely the same
resolution.

Looking briefly at the cgi module also shows a similar implementation gap,
but I see that FieldStorage implements __iter__, which I thought would be
used in "for entry in a" type iteration, and that failing the existence of
__iter__, then __len__ would be tried with successive calls to __getitem__
from 0 to len-1. What *is* the order of resolution for iterating over a
sequence?

(1015249 was also recently submitted, to address problems with
FieldStorage's __len__ function, should also be linked.)

-- Paul

Yep... I think the example failure I showed for FieldStorage was
actually under Python 2.3.4 - so I'm not convinced it's fixed.

I'll raise two new bug reports but include references to the ones you
mention....

Regards,


Fuzzy

http://www.voidspace.org.uk/atlantibots/pythonutils.html
 
P

Peter Otten

Michael said:
Yep... I think the example failure I showed for FieldStorage was
actually under Python 2.3.4 - so I'm not convinced it's fixed.

I'll raise two new bug reports but include references to the ones you
mention....

I think it _is_ fixed:

Python 2.3.3 (#1, Jan 3 2004, 13:57:08)
[GCC 3.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
(I really should update)

I suggest that you try it out under 2.3.4 *before* you file the report. I
don't think it would be polite to bother the developers with a report of a
bug that may already be fixed.

Peter
 
M

Michael Foord

Peter Otten said:
Michael said:
Yep... I think the example failure I showed for FieldStorage was
actually under Python 2.3.4 - so I'm not convinced it's fixed.

I'll raise two new bug reports but include references to the ones you
mention....

I think it _is_ fixed:

Python 2.3.3 (#1, Jan 3 2004, 13:57:08)
[GCC 3.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
(I really should update)

I suggest that you try it out under 2.3.4 *before* you file the report. I
don't think it would be polite to bother the developers with a report of a
bug that may already be fixed.

Peter

I thought I had... but in fact the 'crate' I use to access the
internet on only has Python 2.2 (which I installed for testing my CGIs
on). Looks like it *is* fixed in 2.3.4...

Thanks

Fuzzy

http://www.voidspace.org.uk/atlantibots/pythonutils.html
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,582
Members
45,059
Latest member
cryptoseoagencies

Latest Threads

Top