it-swarm.dev

الثعبان: تميز الكلية غير معروف

لديّ رمز يعمل في نظام Linux ، وأنا أحاول تشغيله الآن في نظام windows ، أقوم باستيراد sys ولكن عندما أستخدم sys.exit (). أحصل على خطأ ، لم يتم تحديد تميز الكلية. هنا هو الجزء الأول من الكود الخاص بي

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

لماذا لا تميز الكلية؟

30
astrochris

نقل import sysالخارج كتلة try-except الكتلة:

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

إذا كان أي من الواردات قبل فإن import sys فشل الخط ، بقية لم يتم تنفيذ الكتلة ، ولا يتم استيراد sys أبدًا. بدلاً من ذلك ، ينتقل التنفيذ إلى كتلة معالجة الاستثناء ، حيث تحاول الوصول إلى اسم غير موجود.

sys هي وحدة مدمجة على أي حال ، فهي دائمًا موجودة لأنها تحتفظ بهياكل البيانات لتتبع الواردات ؛ إذا فشلت عملية الاستيراد sys ، فستواجه مشكلات أكبر في يدك (حيث يشير ذلك إلى أن الكل كسر استيراد الوحدة النمطية).

55
Martijn Pieters

أنت تحاول استيراد كل هذه الوحدات في وقت واحد. حتى لو فشل أحدهم ، لن يتم استيراد الباقي. فمثلا:

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

دعنا نقول foo غير موجود. عندها فقط datetime سيتم استيرادها.

ما يمكنك القيام به هو استيراد الوحدة النمطية sys في بداية الملف ، قبل عبارة try/باستثناء:

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

أخمن أن الشفرة قد فشلت قبل استيراد أنظمة ، لذلك لا يمكن العثور عليها عند معالجة الاستثناء.

أيضًا ، يجب عليك وضع مسافة بادئة للرمز الخاص بك ضمن الكتلة 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()
1
astrognocci