आप इस तरह के एक समारोह को परिभाषित():
import sys
import traceback, inspect
try:
f = open("nonExistant file",'r')
except:
(exc_type, exc_value, exc_traceback) = sys.exc_info()
#print exception type
print exc_type
tb_list = traceback.extract_tb(sys.exc_info()[2])
tb_list = traceback.format_list(tb_list)
for elt in tb_list:
print elt
#Do any processing you need here.
sys मॉड्यूल देखें: तो फिर तुम traceback.format_list()
का उपयोग कर एक पठनीय सूची इस प्रकार है प्राप्त कर सकते हैं
def raiseErr():
for f in inspect.stack(): print '-', inspect.getframeinfo(f[0])
और इसे अपने मॉड्यूल से कॉल करें ताकि:
raiseErr()
फ़ंक्शन raise Err उस स्थान के बारे में जानकारी प्रिंट करेगा जिसे आपने कहा था।
अधिक विस्तृत, तो आप ऐसा कर सकते हैं:
def tr():
print '* - '*10,
print sys._getframe(1).f_code.co_name
और जगह है जहाँ आप का पता लगाने चाहते हैं, उसमें यह कहते हैं:
import inspect, traceback
A = [inspect.getframeinfo(f[0]) for f in inspect.stack()]
print "traceback structure fields:", filter(lambda s: s[0] != '_', dir(A[0]))
print A[0].filename, A[0].lineno
for f in inspect.stack():
F = inspect.getframeinfo(f[0])
print '-', F.filename, F.lineno, '\t', F.code_context[0].strip()
अन्य संभावना इस समारोह को परिभाषित करने के लिए है। यदि आप सभी ट्रेस चाहते हैं, तो _getframe(1)
में 1 से एक इटरेटर बनाएं।
मैं ट्रैस बैक प्रिंट करने का प्रयास नहीं कर रहा हूँ। मैं इसका निरीक्षण करने की कोशिश कर रहा हूं। यह मुझे कैसे बताता है कि अपवाद पाठ में अपवाद हुआ है, या मूल्यांकन किए गए पाठ द्वारा बुलाए गए फ़ंक्शन में? –
'eval' टेक्स्ट गलत है तो SyntaxError फेंक दिया जाएगा। –
अगर eval टेक्स्ट गलत है तो कई अलग-अलग प्रकार की त्रुटियों को फेंक दिया जा सकता है।मैं निरीक्षण का उपयोग कर समाप्त हुआ और यह देखने के लिए कि क्या मूल पाठ का मूल्यांकन करके त्रुटि हुई थी, या यदि यह एक बुलाए गए फ़ंक्शन के शरीर में था, तो ट्रेसबैक की गहराई को देखकर समाप्त हो गया। –