[Python-Dev] PyMapping_Check Bug?

Bernhard Herzog bh at intevation.de
Mon Aug 18 13:28:21 EDT 2003


Guido van Rossum <guido at python.org> writes:

> I don't see this.  operator.isMappingType() maps directly to
> PyMapping_Check(); and I tried this:
>
>     >>> import operator
>     >>> operator.isMappingType(str)
>     False
>     >>> class C(object): pass
>     ...
>     >>> operator.isMappingType(C)
>     False
>     >>> operator.isMappingType(C())
>     False
>     >>> operator.isMappingType({})
>     True
>     >>>
>
> Looks okay to me. :-)

Are these OK, though:

>>> operator.isMappingType(())
True
>>> operator.isMappingType([])
True
>>> operator.isMappingType("")
True


In Python 2.2:

>>> operator.isMappingType(())
0
>>> operator.isMappingType([])
0
>>> operator.isMappingType("")
0


I just found out that this change is the cause for a Bug in my shapelib
bindings which at one point try to determine whether a method argument
is a dictionary like object by testing whether PyMapping_Check returns
true and that assume it's a sequence otherwise.

As a work-around it seems I can use isSequenceType/PySequence_Check to
effectively turn the test around and determine whether the object is a
sequence and assume it's a mapping otherwise.

   Bernhard

-- 
Intevation GmbH                                 http://intevation.de/
Sketch                                 http://sketch.sourceforge.net/
Thuban                                  http://thuban.intevation.org/



More information about the Python-Dev mailing list