web-dev-qa-db-fra.com

python: sys n'est pas défini

J'ai un morceau de code qui fonctionne dans Linux, et j'essaye maintenant de l'exécuter dans Windows, j'importe sys mais quand j'utilise sys.exit (). Je reçois une erreur, sys n'est pas défini. Voici le début de mon code

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

Pourquoi le système ne fonctionne-t-il pas?

30
astrochris

Déplacer import sys à l'extérieur du bloc try-except:

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

Si une des importations avant la ligne import sys Échoue, le reste du bloc n'est pas exécuté et sys n'est jamais importé. Au lieu de cela, l'exécution saute au bloc de gestion des exceptions, où vous essayez ensuite d'accéder à un nom non existant.

sys est un module intégré de toute façon, il est toujours car il contient les structures de données permettant de suivre les importations; si l’importation de sys échoue, vous avez de plus gros problèmes (car cela indiquerait que toute l’importation de modules est interrompue).

55
Martijn Pieters

Vous essayez d'importer tous ces modules en même temps. Même si l'un d'entre eux échoue, le reste ne sera pas importé. Par exemple:

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

Disons que foo n'existe pas. Alors seulement datetime sera importé.

Ce que vous pouvez faire, c'est importer le module sys au début du fichier, avant l'instruction 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()
4
TerryA

Je suppose que votre code a échoué AVANT d'importer le système, il ne peut donc pas le trouver lorsque vous gérez l'exception.

En outre, vous devriez indenter le code dans le bloc try.

essayer:

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