2013-07-20 6 views
17

Ich habe ein Stück Code, der in Linux funktioniert, und ich versuche jetzt, es in Windows auszuführen, ich importiere sys, aber wenn ich sys.exit() verwende. Ich bekomme einen Fehler, sys ist nicht definiert. Hier ist der Anfangsteil meines Codespython: sys ist nicht definiert

try: 
    import numpy as np 
    import pyfits as pf 
    import scipy.ndimage as nd 
    import pylab as pl 
    import os 
    import heapq 
    import sys 
    from scipy.optimize import leastsq 

except ImportError: 
    print "Error: missing one of the libraries (numpy, pyfits, scipy, matplotlib)" 
    sys.exit() 

Warum funktioniert sys nicht ??

Antwort

33

Verschieben import sysaußerhalb des try-except Block:

import sys 
try: 
    # ... 
except ImportError: 
    # ... 

Wenn eine der Einfuhren vor die import sys Linie versagt, die Rest des Blocks nicht ausgeführt wird, und sys ist nie importiert. Stattdessen springt die Ausführung zum Ausnahmebehandlungsblock, in dem Sie dann versuchen, auf einen nicht vorhandenen Namen zuzugreifen.

sys ist ein eingebautes Modul sowieso, es ist immer vorhanden, da es die Datenstrukturen enthält, um Importe zu verfolgen; Wenn das Importieren von sys fehlschlägt, haben Sie größere Probleme auf Ihrer Hand (da dies anzeigen würde, dass alle Modul importieren kaputt ist).

+0

ah ja, dank – astrochris

4

Sie versuchen, alle diese Module gleichzeitig zu importieren. Selbst wenn einer von ihnen fehlschlägt, wird der Rest nicht importiert. Zum Beispiel:

try: 
    import datetime 
    import foo 
    import sys 
except ImportError: 
    pass 

Sagen wir foo existiert nicht. Dann wird nur datetime importiert.

Was können Sie tun, ist die sys-Modul am Anfang der Datei importieren, vor dem try/except-Anweisung:

import sys 
try: 
    import numpy as np 
    import pyfits as pf 
    import scipy.ndimage as nd 
    import pylab as pl 
    import os 
    import heapq 
    from scipy.optimize import leastsq 

except ImportError: 
    print "Error: missing one of the libraries (numpy, pyfits, scipy, matplotlib)" 
    sys.exit() 
+0

ah ja, dank – astrochris

1

Ich bin Ihr Code vor dem Import sys gescheitert erraten, so kann es nicht finde es, wenn du mit der Ausnahme klarkommst.

Außerdem sollten Sie den Code im try Block einrücken.

Versuch:

import sys 
# .. other safe imports 
try: 
    import numpy as np 
    # other unsafe imports 
except ImportError: 
    print "Error: missing one of the libraries (numpy, pyfits, scipy, matplotlib)" 
    sys.exit() 
Verwandte Themen