উত্তর:
ট্রেসব্যাক মডিউলটির মাধ্যমে স্ট্যাকটি পাওয়ার এবং এটি মুদ্রণের উদাহরণ এখানে রয়েছে :
import traceback
def f():
g()
def g():
for line in traceback.format_stack():
print(line.strip())
f()
# Prints:
# File "so-stack.py", line 10, in <module>
# f()
# File "so-stack.py", line 4, in f
# g()
# File "so-stack.py", line 7, in g
# for line in traceback.format_stack():
আপনি যদি কেবল স্টারডারে স্ট্যাকটি মুদ্রণ করতে চান তবে আপনি এটি ব্যবহার করতে পারেন:
traceback.print_stack()
অথবা স্টডআউটে মুদ্রণ করতে (পুনঃনির্দেশিত আউটপুট একসাথে রাখতে চাইলে দরকারী), ব্যবহার করুন:
traceback.print_stack(file=sys.stdout)
তবে এটির মাধ্যমে এটি traceback.format_stack()
আপনাকে যা খুশি তা করতে দেয়।
sys._current_frames()
। উদাহরণস্বরূপ py_better_exchookdump_all_thread_tracebacks
এটি করে (দাবি অস্বীকার: আমি এটি লিখেছি)।
import traceback
traceback.print_stack()
traceback.print_exc()
যা আপনাকে প্রায় একই জিনিস দেয় যা আপনি except
বিবৃতি ব্যতীত অর্জন করতে পারতেন (এবং এটি স্বীকৃত উত্তরের চেয়ে কম কোডিংও হয়)।
traceback.print_exc()
আপনি যে কোনও ব্যতিক্রম হ্যান্ডেল করতে পারেন তার জন্য স্ট্যাক ট্রেস মুদ্রণ করে - তবে এটি মূল প্রশ্নটি সমাধান করে না, যা বর্তমান স্ট্যাকটি কীভাবে প্রিন্ট করা যায় (যখন আপনি এখন "তার বিপরীতে" যেখানে আপনার কোডটি ছিল যখন সর্বশেষ ব্যতিক্রম হয়েছিল তখন বন্ধ, যদি থাকে "।)
inspect.stack()
ব্যতিক্রম ট্রেসব্যাকের পরিবর্তে বর্তমান স্ট্যাকটি প্রদান করে:
import inspect
print inspect.stack()
লগ_স্ট্যাক ইউটিলিটি ফাংশনের জন্য https://gist.github.com/FredLoney/5454553 দেখুন ।
আপনি যদি পাইথন ডিবাগারটি ব্যবহার করেন তবে কেবল ভেরিয়েবলের ইন্টারেক্টিভ প্রোবইনিং হবে না তবে আপনি "যেখানে" কমান্ড বা "ডাব্লু" দিয়ে কল স্ট্যাক পেতে পারেন।
সুতরাং আপনার প্রোগ্রামের শীর্ষে
import pdb
তারপরে কোডটি যেখানে আপনি দেখতে চাইছেন তা কী হচ্ছে
pdb.set_trace()
এবং আপনি একটি প্রম্পটে ফেলে দেওয়া হবে
where
?
(pdb)
কেবল টাইপ করুন where
এবং এটি স্ট্যাক ট্রেসটি টার্মিনালে প্রিন্ট করবে।
breakpoint()
যা পিডিবি আমদানির প্রয়োজনকে বাধা দেয়।
এখানে @ রিচিহিন্ডেলের দুর্দান্ত উত্তরের একটি প্রকরণ রয়েছে যা একটি সাজসজ্জারকে কার্যকর করে যা পছন্দসইভাবে পছন্দসইভাবে ফাংশনে প্রয়োগ করা যেতে পারে। পাইথন 2.7.14 এবং 3.6.4 নিয়ে কাজ করে।
from __future__ import print_function
import functools
import traceback
import sys
INDENT = 4*' '
def stacktrace(func):
@functools.wraps(func)
def wrapped(*args, **kwds):
# Get all but last line returned by traceback.format_stack()
# which is the line below.
callstack = '\n'.join([INDENT+line.strip() for line in traceback.format_stack()][:-1])
print('{}() called:'.format(func.__name__))
print(callstack)
return func(*args, **kwds)
return wrapped
@stacktrace
def test_func():
return 42
print(test_func())
নমুনা থেকে আউটপুট:
test_func() called:
File "stacktrace_decorator.py", line 28, in <module>
print(test_func())
42
এটি পরিদর্শন- ইনস্টল করুন
pip3 install inspect-it --user
কোড
import inspect;print(*['\n\x1b[0;36;1m| \x1b[0;32;1m{:25}\x1b[0;36;1m| \x1b[0;35;1m{}'.format(str(x.function), x.filename+'\x1b[0;31;1m:'+str(x.lineno)+'\x1b[0m') for x in inspect.stack()])
আপনি এই লাইনের একটি স্নিপেট তৈরি করতে পারেন
এটি আপনাকে একটি ফাইল নাম এবং লাইন নম্বর সহ ফাংশন কল স্ট্যাকের একটি তালিকা প্রদর্শন করবে
আপনি এই লাইনটি যেখানে রেখেছেন শুরু থেকে তালিকা করুন