Seite 1 von 1

Modul (email.header) erst nach Aufruf der Hilfe verfügbar

Verfasst: Donnerstag 19. April 2012, 08:36
von sparrow
Hallo Forum,

ich habe gerade ein reichlich verwirrendes Problem.

Ich möchte email.header verwenden, das ist eigentlich kein großes Problem. Jetzt kommt es aber zu folgendem Effekt, den ich in der IDLE-Shell nachgestellt habe:

Code: Alles auswählen

>>> ================================ RESTART ================================
>>> import email
>>> a = "Hallo"
>>> email.header.decode_header(a)

Traceback (most recent call last):
  File "<pyshell#9>", line 1, in <module>
    email.header.decode_header(a)
AttributeError: 'module' object has no attribute 'header'
>>> email
<module 'email' from 'C:\Python27\lib\email\__init__.pyc'>
>>> email.header

Traceback (most recent call last):
  File "<pyshell#11>", line 1, in <module>
    email.header
AttributeError: 'module' object has no attribute 'header'
>>> help(email)
Help on package email:
[...] # hier habe ich gekürzt
>>> email.header
<module 'email.header' from 'C:\Python27\lib\email\header.pyc'>
Ich kann mir das nicht erklären....

Hilfe?


Gruß
Sebastian

Re: Modul (email.header) erst nach Aufruf der Hilfe verfügba

Verfasst: Donnerstag 19. April 2012, 08:54
von sma
Wenn du in email/__init__.py schaust, findest du da den folgenden Code:

Code: Alles auswählen

for _name in _LOWERNAMES:
    importer = LazyImporter(_name.lower())
    sys.modules['email.' + _name] = importer
    setattr(sys.modules['email'], _name, importer)
Das "email"-Modul fummelt aus Kompatibilitätsgründen irgendwie an Dingen und Sachen herum, an denen ein normales Modul nicht fummeln sollte. Da "help(email)" die Attribute von "email" aufzählt und abfragt, löst das das Laden der Sub-Module als Nebeneffekt aus.

Allgemein gilt jedoch: Wenn du "email.header" benutzen willst, importiere auch "email.header" und nicht nur "email".

Stefan

Re: Modul (email.header) erst nach Aufruf der Hilfe verfügba

Verfasst: Donnerstag 19. April 2012, 08:58
von sparrow
Danke!

ok, das ist also seltsame Import-Magie im Hintergrund. Ich dachte schon ich hätte da etwas falsch gemacht und den Wald vor lauter Bäumen nicht gesehen.