<질문>
Python에서 메서드 내에서 현재 호출 스택을 어떻게 인쇄할 수 있습니까(디버깅 목적으로).
<답변1>
다음은 다음을 통해 스택을 가져오는 예입니다.traceback모듈 및 인쇄:
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
# f()
# File "so-stack.py", line 4, in f
# g()
# File "so-stack.py", line 7, in g
# for line in traceback.format_stack():
스택을 stderr로만 인쇄하려는 경우 다음을 사용할 수 있습니다.
traceback.print_stack()
또는 stdout으로 인쇄하려면(리디렉션된 출력을 함께 유지하려는 경우에 유용함) 다음을 사용하십시오.
traceback.print_stack(file=sys.stdout)
그러나 그것을 통해 얻는traceback.format_stack()
원하는대로 할 수 있습니다.
<답변2>
import traceback
traceback.print_stack()
<답변3>
pdb를 사용하는 동안 호출 스택을 인쇄해야 하는 사람들을 위해 다음을 수행하십시오.
(Pdb) where
<답변4>
inspect.stack()
예외 트레이스백이 아닌 현재 스택을 반환합니다:
import inspect
print inspect.stack()
보다https://gist.github.com/FredLoney/5454553log_stack 유틸리티 함수용.
<답변5>
Python 디버거를 사용하는 경우 변수의 대화형 프로브뿐만 아니라 "where" 명령 또는 "w"를 사용하여 호출 스택을 가져올 수 있습니다.
따라서 프로그램 상단에
import pdb
그런 다음 무슨 일이 일어나고 있는지 확인하려는 코드에서
pdb.set_trace()
프롬프트에 빠지게 됩니다.
<답변6>
다음은 원하는 대로 기능에 선택적으로 적용할 수 있는 데코레이터를 구현하는 @RichieHindle의 우수한 답변의 변형입니다. Python 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
print(test_func())
42
<답변7>
설치하다인스펙트잇
pip3 install inspect-it --user
암호
import inspect;print(*['{:40}| {}:{}\n'.format(x.function, x.filename, x.lineno) for x in inspect.stack()])
이 줄의 스니펫을 만들 수 있습니다.
그것은 당신에게 목록을 보여줄 것입니다함수 호출 스택파일 이름과 줄 번호 포함
처음부터 이 줄을 넣는 위치까지 나열
'개발 > Python' 카테고리의 다른 글
[파이썬] 문자의 ASCII 값을 얻는 방법 (0) | 2023.08.11 |
---|---|
[파이썬] '이진 문자열'을 '일반 문자열'로 변환하는 방법 (0) | 2023.01.22 |
[파이썬] len함수 코스트(비용) (0) | 2023.01.22 |
[파이썬] NumPy 배열을 파이썬 리스트로 변환 (0) | 2023.01.22 |