55

我有一段在 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 不工作?

4

4 回答 4

102

移出-块:import sys _tryexcept

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

如果该行之前import sys的任何导入失败,则不会执行该块的其余部分sys,并且永远不会导入。相反,执行跳转到异常处理块,然后您尝试访问一个不存在的名称。

sys无论如何,它是一个内置模块,它始终存在,因为它拥有跟踪导入的数据结构;如果导入sys失败,您手头会有更大的问题(因为这表明所有模块导入都已损坏)。

于 2013-07-20T11:23:55.870 回答
5

您正在尝试一次导入所有这些模块。即使其中一个失败,其余的也不会导入。例如:

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

假设foo不存在。然后只会datetime被导入。

您可以做的是在文件开头导入 sys 模块,在 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()
于 2013-07-20T11:24:09.857 回答
2

我猜你的代码在 import 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()
于 2013-07-20T11:26:03.927 回答
1

除了上面给出的答案之外,请检查控制台中错误消息的最后一行。就我而言, sys.path.append('.....') 中的 'site-packages' 路径是错误的。

于 2020-12-12T17:19:12.963 回答