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

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
sparrow
User
Beiträge: 4164
Registriert: Freitag 17. April 2009, 10:28

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
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

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
Benutzeravatar
sparrow
User
Beiträge: 4164
Registriert: Freitag 17. April 2009, 10:28

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.
Antworten