جعل Python 2.6 استثناء متوافق مع الخلف
-
21-09-2019 - |
سؤال
لدي رمز بيثون التالي:
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