Python: sys не определен
У меня есть часть кода, которая работает в 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 не работает?
Ответы
Ответ 1
Переместите import sys
вне блока try
- except
:
import sys
try:
# ...
except ImportError:
# ...
Если какой-либо импорт до строки import sys
выходит из строя, остальная часть блока не выполняется, а sys
никогда не импортируется. Вместо этого выполнение переходит к блоку обработки исключений, где вы затем пытаетесь получить доступ к несуществующему имени.
sys
- это встроенный модуль в любом случае, он всегда присутствует, поскольку он содержит структуры данных для отслеживания импорта; если импорт sys
терпит неудачу, у вас больше проблем с вашей стороны (так как это указывает на то, что весь импорт модуля нарушен).
Ответ 2
Вы пытаетесь сразу импортировать все эти модули. Даже если один из них терпит неудачу, остальные не будут импортированы. Например:
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()
Ответ 3
Я предполагаю, что ваш код не прошел, прежде чем импортировать 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()