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

これらのモジュールをすべて一度にインポートしようとしています。そのうちの 1 つが失敗しても、残りはインポートされません。例えば:

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()
于 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 に答える