如何使用inspect获得多行语句?

时间:2019-04-15 10:22:36

标签: python inspect

我正在检查,并希望查找发送到调试功能的表达式中的每一行,以便在有

dbg("hello"
    .replace("h", "H")
    .lower()
    .upper())

我得到了发送到dbg的代码。这可能吗?

这是我一直在使用的功能(来自pydbg):

"""pydbg is an implementation of the Rust2018 builtin `dbg` for Python."""

import inspect
import sys
import typing


__version__ = "0.3.0"


_ExpType = typing.TypeVar('_ExpType')


def dbg(exp: _ExpType) -> _ExpType:
    """Call dbg with any variable or expression.
    Calling debug will print out the content information (file, lineno) as wil as the
    passed expression and what the expression is equal to::
        from pydbg import dbg
        a = 2
        b = 5
        dbg(a+b)
        def square(x: int) -> int:
            return x * x
        dbg(square(a))
    """

    for frame in inspect.stack():
        line = frame.code_context[0]
        if "dbg" in line:
            start = line.find('(') + 1
            end =  line.rfind(')')
            if end == -1:
                end = len(line)
            print(
                f"[{frame.filename}:{frame.lineno}] {line[start:end]} = {exp!r}",
                file=sys.stderr,
            )
            break

    return exp

这是我第一次尝试检查,但一直找不到我想要的东西。目前,使用

from pydbg import dbg

dbg(a +
  1)

不打印任何内容。 dbg()中的所有内容都必须在一行上才能正常工作。

0 个答案:

没有答案