[Python-de] Fehler in Python 2.1?

Bernhard Herzog bh at intevation.de
Fri May 11 16:48:24 EDT 2001


"Marko Leipert" <python-list at mleipert.de> writes:

> Hallo,
> 
> folgendes Problem, welches bei der Arbeit mit Zope hochkam, laesst sich
> ziemlich einfach auch an der Kommandozeile von Python nachvollziehen:
> 
> MLNB [1] C:\dev\c\ext\zope\Zope-2.3.2-src\pcgi\Win32>python
> Python 2.1 (#15, Apr 16 2001, 18:25:49) [MSC 32 bit (Intel)] on win32
> Type "copyright", "credits" or "license" for more information.
> >>> import pickle
> >>> pickle.mloads
> <built-in function loads>
> >>> from pickle import *
> >>> mloads
> Traceback (most recent call last):
>   File "<stdin>", line 1, in ?
> NameError: name 'mloads' is not defined
> >>>
> 
> Warum ist 'mloads' jetzt im globalen Namensraum nicht verfuegbar?
> Ist das ein Denkfehler oder ein Python-Bug?

Das hängt mit folgender Änderung in Python 2.1 zusammen:

 - Two changes to from...import:

  1) "from M import X" now works even if (after loading module M)
     sys.modules['M'] is not a real module; it's basically a getattr()
     operation with AttributeError exceptions changed into ImportError.

  2) "from M import *" now looks for M.__all__ to decide which names to
     import; if M.__all__ doesn't exist, it uses M.__dict__.keys() but
     filters out names starting with '_' as before.  Whether or not
     __all__ exists, there's no restriction on the type of M.

In pickle.__all__ ist 'mloads' nicht enthalten, wird daher bei 'from
pickle import *' auch nicht importiert.

'from ... import *' sollte man aber sowieso vermeiden :)

In früheren Versionen spielte __all__ nur bei Paketen eine Rolle, wenn
ich mich recht entsinne. 

Ob es nun ein Bug ist, daß mloads nicht in pickle.__all__ ist, weiß ich
nicht, aber da mloads nur ein alias ist für marshal.loads würde ich mal
sagen daß es kein Bug ist.

   Bernhard

-- 
Intevation GmbH                                 http://intevation.de/
Sketch                                 http://sketch.sourceforge.net/
MapIt!                                               http://mapit.de/



More information about the Python-de mailing list