파이썬 디버그 기능

3808 단어 pythontutorial
Rust에서 주어진 표현식이 평가하는 것으로 인쇄하는 매크로dbg!를 찾을 수 있습니다. 이것은 그 자체로는 그다지 도움이 되지 않을 것입니다. 따라서 추가로 매크로는 평가된 식의 값을 반환합니다.

Python에서 이 기능을 모방하는 것이 가능합니다. Raphael's blog에서 원래 구현을 찾을 수 있습니다. 내가 사용하는 것은 대략 다음과 같습니다.

import inspect
import sys
import typing

_ExpType = typing.TypeVar('_ExpType')


def dbg(exp: _ExpType) -> _ExpType:
    for frame in inspect.stack():
        line = frame.code_context[0]

        if 'dbg' in line:
            start = line.find('(') + 1
            end = end if (end := line.rfind(')')) >= 0 else len(line) 

            print(f'[{frame.filename}:{frame.lineno}] {line[start:end]} = {exp!r}', 
                  file=sys.stderr)
            break

    return exp

*.py 파일이든 노트북이든 관계없이 훌륭하게 작동합니다. 예시 출력:

>>> a, b = 1, 2
... dbg(a + b)
[(...):2] a + b = 3
3

좋은 웹페이지 즐겨찾기