2013-07-20 19 views
17

Mam kawałek kodu, który działa w systemie Linux, a ja teraz próbuje uruchomić go w oknach, ja import sys ale kiedy używam sys.exit(). Wystąpił błąd, sys nie jest zdefiniowany. Oto początkowa część mojego kodupython: sys nie jest zdefiniowana

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() 

Dlaczego sys nie działa?

Odpowiedz

33

Move import syspoza z try - blok except:

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

Jeżeli którykolwiek z importu przed zawodzi linia import sys Z reszta bloku nie jest wykonywany, a sys jest nigdy nie importowane. Zamiast tego, wykonanie przechodzi do bloku obsługi wyjątków, w którym próbujesz uzyskać dostęp do nieistniejącej nazwy.

sys mimo to jest wbudowanym modułem, to jest zawsze obecny jako posiada struktury danych do śledzenia importu; jeśli importowanie sys zakończy się niepowodzeniem, masz większe problemy z ręką (co oznacza, że ​​importowanie modułu jest zepsute).

+0

ah tak, dzięki – astrochris

4

Próbujesz zaimportować wszystkie te moduły jednocześnie. Nawet jeśli jedno z nich zawiedzie, reszta nie zostanie zaimportowana. Na przykład:

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

Załóżmy, że foo nie istnieje. Wtedy zaimportowane zostanie tylko datetime.

Co można zrobić, to zaimportować moduł sys na początku pliku, przed try/except:

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 tak, dzięki – astrochris

1

Zgaduję kod zawiodły PRZED import sys, więc nie może znajdź go, gdy będziesz obsługiwał wyjątek.

Ponadto, należy wciąć kod Whithin blok try.

try:

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() 
Powiązane problemy