चलो कहते हैं कि मैं निम्नलिखित बहु लाइन स्ट्रिंग करते हैं:कैसे पायथन में कार्यकारी या execfile से किसी त्रुटि के लाइन नंबर पाने के लिए
cmd = """
a = 1 + 1
b = [
2 + 2,
4 + 4,
]
bork bork bork
"""
और मैं किसी खास दायरे में यह निष्पादित करने के लिए करना चाहते हैं:
scope = {}
exec(cmd, scope)
print scope[ 'b' ]
कमांड के लाइन 6 पर SyntaxError
है, और मैं उपयोगकर्ता को इसकी रिपोर्ट करने में सक्षम होना चाहता हूं। मैं लाइन नंबर कैसे प्राप्त करूं? मैं इस की कोशिश की है:
try:
exec(cmd, scope) # <-- let's say this is on line 123 of the source file
except Exception, err:
a, b, c = sys.exc_info()
line_number = c.tb_lineno # <-- this gets me 123, not 6
print "%s at line %d (%s)" % (a, line_number, b.message)
... लेकिन मैं exec
बयान के लाइन नंबर, नहीं बहु लाइन आदेश के भीतर लाइन नंबर मिलता है।
अद्यतन: यह इस उदाहरण के लिए मनमाने ढंग से चुने गए अपवाद के प्रकार को संभालने का पता चला है, SyntaxError
, किसी अन्य प्रकार के हैंडलिंग से अलग है। स्पष्टीकरण के लिए, मैं एक समाधान देख रहा हूं जो किसी भी प्रकार के अपवाद के साथ copes।
आप में देखा है [ 'pdb'] (https://docs.python.org/2/library/pdb.html)? – jonrsharpe