Python sys.\u getframe(1).f\u lineno如何工作?

Python sys.\u getframe(1).f\u lineno如何工作?,python,unit-testing,testing,Python,Unit Testing,Testing,我找到了这段测试代码,并用各种代码运行了它,发现它是正确的,但我无法理解它是如何编写的,这行代码在做什么,以及它是如何做的: linenum = sys._getframe(1).f_lineno 有人能告诉我上面这行代码的工作原理吗?完整的代码块是: import sys def test(did_pass): """ Print the result of a test. """ linenum = sys._getframe(1).f_lineno # Get

我找到了这段测试代码,并用各种代码运行了它,发现它是正确的,但我无法理解它是如何编写的,这行代码在做什么,以及它是如何做的:

linenum = sys._getframe(1).f_lineno
有人能告诉我上面这行代码的工作原理吗?完整的代码块是:

import sys

def test(did_pass):
    """  Print the result of a test.  """
    linenum = sys._getframe(1).f_lineno   # Get the caller's line number.
    if did_pass:
        msg = "Test at line {0} ok.".format(linenum)
    else:
        msg = ("Test at line {0} FAILED.".format(linenum))
    print(msg)

它显示调用堆栈中函数的行号

例如:

上面清单的输出如下所示:

<frame at 0x101172dc0, file 'temp.py', line 12, code f3>
  frame     = sys._getframe(0)
  function  = f3()
  file/line = temp.py:12
<frame at 0x101184200, file 'temp.py', line 7, code f2>
  frame     = sys._getframe(1)
  function  = f2()
  file/line = temp.py:7
<frame at 0x1011f29f0, file 'temp.py', line 4, code f1>
  frame     = sys._getframe(2)
  function  = f1()
  file/line = temp.py:4

frame=sys.\u getframe(0)
函数=f3()
文件/行=temp.py:12
frame=sys.\u getframe(1)
函数=f2()
文件/行=temp.py:7
frame=sys.\u getframe(2)
函数=f1()
文件/行=temp.py:4
只需检查与行号和函数调用的协同连接

<frame at 0x101172dc0, file 'temp.py', line 12, code f3>
  frame     = sys._getframe(0)
  function  = f3()
  file/line = temp.py:12
<frame at 0x101184200, file 'temp.py', line 7, code f2>
  frame     = sys._getframe(1)
  function  = f2()
  file/line = temp.py:7
<frame at 0x1011f29f0, file 'temp.py', line 4, code f1>
  frame     = sys._getframe(2)
  function  = f1()
  file/line = temp.py:4