سؤال

لدي رمز بيثون التالي:

 try:
      pr.update()
 except ConfigurationException as e:
      returnString=e.line+' '+e.errormsg

هذا يعمل تحت Python 2.6 ، ولكن بناء جملة "AS E" يفشل ضمن الإصدارات السابقة. كيف يمكنني حل هذا؟ أو بعبارة أخرى ، كيف يمكنني التقاط استثناءات محددة من قبل المستخدم (واستخدام متغيرات المثيل الخاصة بهم) تحت Python 2.6. شكرًا لك!

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

المحلول

هذا متوافق للخلف:

try:
    pr.update()
except ConfigurationException, e:
    returnString=e.line+' '+e.errormsg

نصائح أخرى

هذا متخلف وإلى الأمام متوافق:

import sys
try:
    pr.update()
except (ConfigurationException,):
    e = sys.exc_info()[1]
    returnString = "%s %s" % (e.line, e.errormsg)

هذا يتخلص من مشكلة الغموض في Python 2.5 وأقدما ، في حين لا يزال لا يفقد أي من مزايا التباين 2.6/3 ، أي لا يزال بإمكانه التقاط أنواع استثناءات متعددة بشكل لا لبس فيه على سبيل المثال except (ConfigurationException, AnotherExceptionType): وإذا كانت هناك حاجة إلى معالجة من النوع ، فلا يزال بإمكانها الاختبار exc_info()[0]==AnotherExceptionType.

اقرا هذا: http://docs.python.org/reference/compound_stmts.html#the-try-statement

وهذا: http://docs.python.org/whatsnew/2.6.html#pep-3110-exception-hanges

لا تستخدم as, ، إستخدم ,.

ال as بناء الجملة على وجه التحديد غير متوافق إلى الوراء لأن , بناء الجملة غامض ويجب أن يزول في بيثون 3.

try:
    pr.update()
except ConfigurationException, e:
    returnString = e.line + " " + e.errormsg
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top