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が機能しないのはなぜですか?
移動import sys
外部try
-except
ブロックの:
import sys
try:
# ...
except ImportError:
# ...
インポートのいずれかbefore the import sys
行は失敗し、ブロックのrestは実行されず、sys
はインポートされません。代わりに、実行は例外処理ブロックにジャンプし、そこで存在しない名前にアクセスしようとします。
sys
はとにかく組み込みモジュールです。インポートを追跡するためのデータ構造を保持しているため、alwaysが存在します。 sys
のインポートに失敗した場合、手に大きな問題があります(それはallモジュールのインポートが壊れていることを示します)。
これらすべてのモジュールを一度にインポートしようとしています。それらの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()
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()