2009-09-03 15 views
8

मैं निम्नलिखित अजगर कोड है:बनाने अजगर 2.6 अपवाद पिछड़े संगत

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

यह अजगर 2.6 के तहत काम करता है, लेकिन "ई" के रूप में वाक्य रचना पिछले संस्करणों के तहत विफल रहता है। मैं इसे कैसे हल कर सकता हूं? या दूसरे शब्दों में, मैं Python 2.6 के तहत उपयोगकर्ता द्वारा परिभाषित अपवाद (और उनके आवृत्ति चर का उपयोग कैसे) पकड़ सकता हूं। धन्यवाद!

उत्तर

9

इस पिछड़े संगत है:

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

पीईपी 3110 देखें क्यों यह बदला गया: http://www.python.org/dev/peps/pep-3110/ – Greg

+1

, वाक्यविन्यास निश्चित रूप से पिछड़ा संगत है, लेकिन यह _forward_ संगत नहीं है। यह पायथन 3 में अमान्य है और एक वाक्यविन्यास त्रुटि उठाता है। हां, यह रनटाइम त्रुटि नहीं है, लेकिन एक संकलित समय त्रुटि है जिसे पकड़ा नहीं जा सकता है। Http://docs.python.org/library/sys.html#sys.exc_info और @ मारियो-रग्गीर का उत्तर नीचे देखें – Nathan

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

इस पढ़ें: http://docs.python.org/reference/compound_stmts.html#the-try-statement

और इस: http://docs.python.org/whatsnew/2.6.html#pep-3110-exception-handling-changes

as का उपयोग न करें, एक , का उपयोग करें।

as वाक्य रचना विशेष रूप से नहीं पीछे की ओर संगत है क्योंकि , वाक्य रचना अस्पष्ट है और पायथन में दूर 3.

12

यह दोनों पिछड़े है जाना और आगे संगत करना होगा:

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

इस से छुटकारा मिलता है पाइथन 2.5 और इससे पहले की अस्पष्टता समस्या, जबकि अभी भी पायथन 2.6/3 भिन्नता के किसी भी फायदे को खो नहीं रहा है यानी अभी भी अनजाने में कई अपवाद प्रकारों को पकड़ सकते हैं जैसे except (ConfigurationException, AnotherExceptionType): और, यदि प्रति-प्रकार हैंडलिंग की आवश्यकता है, तो अभी भी exc_info()[0]==AnotherExceptionType के लिए परीक्षण कर सकते हैं।

संबंधित मुद्दे