2013-02-20 14 views
6

Ich arbeite an Python 2.6/2.7-Code, der Folgendes enthält:Python: Kann __file__ Keine sein, wenn der Import erfolgreich war?

try: 
    import gmpy 
    gmpy_imported=True 
except ImportError: 
    gmpy_imported=False 

if gmpy_imported and gmpy.__file__ is None: 
    gmpy_imported=False 

ich den try-except Teil verstehen kann, die, wenn gmpy auf dem System installiert wurde, um zu sehen, verwendet wird - und wenn nicht, zu mach was auch immer. Allerdings verstehe ich nicht, warum die if gmpy.__file__ is None Prüfung notwendig ist; es scheint überflüssig zu sein.

Gibt es Umstände, unter denen der Import eines Pakets erfolgreich war, aber der Pfad zum Paket tatsächlich leer ist? Ist dies ein Fail-Safe gegen eine beschädigte Installation?

+0

Wenn dies Python 3.2+ ist, ist der Import-bezogene Code tatsächlich lesbar genug, dass wir wahrscheinlich durchgehen könnten und sehen, ob so etwas jemals passieren könnte. Aber ich glaube nicht, dass ich das mit dem alten Code ausprobieren möchte ... – abarnert

+0

Nein, es ist Python 2. Ich hätte das in der Frage klären sollen ... – Boris

Antwort

2

Diese Überprüfung hat keinen Sinn. Wenn das Modul/Paket erfolgreich importiert wurde, wäre __file__ niemals keins, es wäre der Pfad des Moduls.

+0

Das dachte ich mir auch ... ich werde es tun verbringe etwas mehr Zeit mit diesem Problem, weil ich mehr wissen möchte. – Boris

2

Die Dokumente sagen "Das __file__ Attribut ist nicht vorhanden für C-Module, die statisch in den Interpreter verknüpft sind", also glaube ich, dass es überflüssig ist. Abgesehen davon, welchen Unterschied es machen würde, ist das Modulobjekt da.

+1

"nicht vorhanden" ist nicht dasselbe wie "keine". – interjay

+0

@interjay: Wahr. Angesichts der Tatsache, dass die Dokumente keinen Fall definieren, in dem sie vorhanden wären und auf "None" gesetzt würden - was meine Behauptung stützt, dass sie überflüssig ist. – martineau

+0

+1. Aber wenn die Dokumente zu sagen scheinen, dass dies nie passieren sollte, und doch jemand den Code geschrieben hat ... woher wissen wir, dass es nicht _ ist, zB "eine fehlersichere gegen eine beschädigte Installation zu überprüfen", wie das OP vorgeschlagen hat , ohne den Import-Code zu lesen (oder zu versuchen, eine Test-Suite zu erstellen, oder Raten basierend auf dem, was wir über das Wissen der Person wissen, die den OP-Code geschrieben hat, oder ...)? – abarnert

Verwandte Themen