سؤال

لديّ نص أريد الخروج مبكرًا تحت بعض الحالات:

if not "id" in dir():
     print "id not set, cannot continue"
     # exit here!
# otherwise continue with the rest of the script...
print "alright..."
[ more code ]

أقوم بتشغيل هذا البرنامج النصي باستخدام execfile("foo.py") من موجه Python Interactive وأود أن يخرج البرنامج النصي إلى مترجم تفاعلي. كيف أقوم بهذا العمل؟ إذا استخدمت sys.exit(), ، مترجم بيثون يخرج تماما.

هل كانت مفيدة؟

المحلول

ضع كتلة الرمز الخاص بك في طريقة وعودة من هذه الطريقة ، مثل هذا:

def do_the_thing():
    if not "id" in dir():
         print "id not set, cannot continue"
         return
         # exit here!
    # otherwise continue with the rest of the script...
    print "alright..."
    # [ more code ]

# Call the method
do_the_thing()

أيضًا ، ما لم يكن هناك سبب وجيه لاستخدام execfile () ، فمن المحتمل أن يتم وضع هذه الطريقة في وحدة نمطية ، حيث يمكن استدعاؤها من نص Python آخر عن طريق استيرادها:

import mymodule
mymodule.do_the_thing()

نصائح أخرى

في المترجم التفاعلي ؛ امساك SystemExit أرتفع بواسطة sys.exit وتجاهلها:

try:
    execfile("mymodule.py")
except SystemExit:
    pass

أنا مهووس قليلاً بـ ipython للعمل التفاعلي ولكن تحقق من البرنامج التعليمي على التضمين قذيفة لحل أكثر قوة من هذا (وهو طريقك الأكثر مباشرة).

بدلاً من استخدام execfile ، يجب أن تجعل البرنامج النصي قابل للاستيراد (اسم=='الأساسية الحماية ، المنفصل إلى وظائف ، وما إلى ذلك) ، ثم اتصل بالوظائف من المترجم.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top