我有一段代码正在Linux中工作,我现在正试图在Windows中运行它,我导入sys但是当我使用sys.exit()时。我收到一个错误,sys没有定义。这是我的代码的开头部分
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()
为什么sys不工作?
答案 0 :(得分:51)
将import sys
- try
区块的except
移到之外:
import sys
try:
# ...
except ImportError:
# ...
如果 import sys
行之前的任何导入失败,则不会执行该块的 rest ,并且永远不会导入sys
。相反,执行会跳转到异常处理块,然后您尝试访问不存在的名称。
sys
是一个内置模块,始终存在,因为它拥有跟踪导入的数据结构;如果导入sys
失败,那么您手上就会遇到更大问题(因为这表明所有模块导入都已损坏)。
答案 1 :(得分:4)
您正尝试一次导入所有这些模块。即使其中一个失败,其余的也不会导入。例如:
try:
import datetime
import foo
import sys
except ImportError:
pass
假设foo
不存在。然后只会导入datetime
。
您可以做的是在try / except语句之前导入文件开头的sys模块:
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()
答案 2 :(得分:1)
我猜你的代码在导入sys之前失败了,所以当你处理异常时它找不到它。
此外,您应该在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()
答案 3 :(得分:0)
除了上面给出的答案外,请在控制台中检查错误消息的最后一行。就我而言,sys.path.append('.....')中的“站点包”路径是错误的。