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()