相当于C ++的Python __LINE__

Arn*_*nzy 3 python

在C ++中进行调试的有用打印内容是

std::cout << __LINE__ << std::endl;
Run Code Online (Sandbox Code Playgroud)

当然,您可以简单地打印带有行号的字符串,例如:

std::cout << "this is line 54" << std::endl;
Run Code Online (Sandbox Code Playgroud)

但是当您四处移动时,它不会一直更改行号。Python中是否有任何等效的宏?

小智 8

定义一个类,该类的__str__方法返回当前行号:

import inspect

class LineNo:
    def __str__(self):
        return str(inspect.currentframe().f_back.f_lineno)


__line__ = LineNo()

Run Code Online (Sandbox Code Playgroud)

现在它更类似于 C++:

print(__file__, __line__)
Run Code Online (Sandbox Code Playgroud)


Cof*_*sso 7

没有宏,但是你可以做

from inspect import currentframe, getframeinfo

print(getframeinfo(currentframe()).lineno)

Run Code Online (Sandbox Code Playgroud)

在Python中获取当前行号。

“当前行号”将是currentframe()被评估的行,仅供参考。


o11*_*11c 6

作为一个函数,所以你不必到处扩展它

import sys

def LINE():
    return sys._getframe(1).f_lineno


print('This is line', LINE())
Run Code Online (Sandbox Code Playgroud)

TBH 我从来没有理解inspect模块的意义。

  • 检查模块旨在以门户方式访问有关 Python 对象的信息的公共方式,例如,如果您需要 CPython 以外的 Python 实现(例如 PyPi、Jython 或 IronPython)。你不应该明确地使用 `_getframe`,“CPython 实现细节:这个函数应该只用于内部和专门的目的。它不保证存在于 Python 的所有实现中。” 如果您使用检查,您可以保证它不仅仅适用于 CPython。使用 `getframeinfo(currentframe())` 无处不在,`_getframe` 可能会中断。 (3认同)