<legend id='wNXNN'><style id='wNXNN'><dir id='wNXNN'><q id='wNXNN'></q></dir></style></legend>
    <i id='wNXNN'><tr id='wNXNN'><dt id='wNXNN'><q id='wNXNN'><span id='wNXNN'><b id='wNXNN'><form id='wNXNN'><ins id='wNXNN'></ins><ul id='wNXNN'></ul><sub id='wNXNN'></sub></form><legend id='wNXNN'></legend><bdo id='wNXNN'><pre id='wNXNN'><center id='wNXNN'></center></pre></bdo></b><th id='wNXNN'></th></span></q></dt></tr></i><div id='wNXNN'><tfoot id='wNXNN'></tfoot><dl id='wNXNN'><fieldset id='wNXNN'></fieldset></dl></div>
    <tfoot id='wNXNN'></tfoot>
      <bdo id='wNXNN'></bdo><ul id='wNXNN'></ul>
  • <small id='wNXNN'></small><noframes id='wNXNN'>

      1. 调试:获取从中调用函数的文件名和行号?

        Debugging: Get filename and line number from which a function is called?(调试:获取从中调用函数的文件名和行号?)

      2. <small id='BX7aL'></small><noframes id='BX7aL'>

          <legend id='BX7aL'><style id='BX7aL'><dir id='BX7aL'><q id='BX7aL'></q></dir></style></legend>

                <i id='BX7aL'><tr id='BX7aL'><dt id='BX7aL'><q id='BX7aL'><span id='BX7aL'><b id='BX7aL'><form id='BX7aL'><ins id='BX7aL'></ins><ul id='BX7aL'></ul><sub id='BX7aL'></sub></form><legend id='BX7aL'></legend><bdo id='BX7aL'><pre id='BX7aL'><center id='BX7aL'></center></pre></bdo></b><th id='BX7aL'></th></span></q></dt></tr></i><div id='BX7aL'><tfoot id='BX7aL'></tfoot><dl id='BX7aL'><fieldset id='BX7aL'></fieldset></dl></div>
                  <tbody id='BX7aL'></tbody>
                <tfoot id='BX7aL'></tfoot>
                  <bdo id='BX7aL'></bdo><ul id='BX7aL'></ul>
                  本文介绍了调试:获取从中调用函数的文件名和行号?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                  问题描述

                  我目前正在用Python构建一个相当复杂的系统,在调试时,我经常将简单的打印语句放在几个脚本中。为了保持概述,我通常还想打印出打印语句所在的文件名和行号。当然,我可以手动执行此操作,也可以使用以下命令:

                  from inspect import currentframe, getframeinfo
                  
                  print getframeinfo(currentframe()).filename + ':' + str(getframeinfo(currentframe()).lineno) + ' - ', 'what I actually want to print out here'
                  

                  它会打印类似以下内容的内容:

                  filenameX.py:273 - what I actually want to print out here
                  

                  为了更简单,我希望能够执行以下操作:

                  print debuginfo(), 'what I actually want to print out here'
                  

                  所以我把它放到某个函数中,并尝试这样做:

                  from debugutil import debuginfo
                  print debuginfo(), 'what I actually want to print out here'
                  print debuginfo(), 'and something else here'
                  

                  不幸的是,我收到:

                  debugutil.py:3 - what I actually want to print out here
                  debugutil.py:3 - and something else here
                  

                  它打印出我在其上定义函数的文件名和行号,而不是我调用debuginfo()的那一行。这是显而易见的,因为代码位于debugutil.py文件中。

                  所以我的问题实际上是:如何获取从中调用此debuginfo()函数的文件名和行号?

                  推荐答案

                  函数inspect.stack()返回frame records的列表,从调用者开始,然后移出,您可以使用该列表获取所需的信息:

                  from inspect import getframeinfo, stack
                  
                  def debuginfo(message):
                      caller = getframeinfo(stack()[1][0])
                      print("%s:%d - %s" % (caller.filename, caller.lineno, message)) # python3 syntax print
                  
                  def grr(arg):
                      debuginfo(arg)      # <-- stack()[1][0] for this line
                  
                  grr("aargh")            # <-- stack()[2][0] for this line
                  

                  输出

                  example.py:8 - aargh
                  

                  这篇关于调试:获取从中调用函数的文件名和行号?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                  本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

                  相关文档推荐

                  Split a Pandas column of lists into multiple columns(将 Pandas 的列表列拆分为多列)
                  How does the @property decorator work in Python?(@property 装饰器在 Python 中是如何工作的?)
                  What is the difference between old style and new style classes in Python?(Python中的旧样式类和新样式类有什么区别?)
                  How to break out of multiple loops?(如何打破多个循环?)
                  How to put the legend out of the plot(如何将传说从情节中剔除)
                  Why is the output of my function printing out quot;Nonequot;?(为什么我的函数输出打印出“无?)

                      <legend id='IecmL'><style id='IecmL'><dir id='IecmL'><q id='IecmL'></q></dir></style></legend>
                      <tfoot id='IecmL'></tfoot>
                    • <small id='IecmL'></small><noframes id='IecmL'>

                        <bdo id='IecmL'></bdo><ul id='IecmL'></ul>
                      • <i id='IecmL'><tr id='IecmL'><dt id='IecmL'><q id='IecmL'><span id='IecmL'><b id='IecmL'><form id='IecmL'><ins id='IecmL'></ins><ul id='IecmL'></ul><sub id='IecmL'></sub></form><legend id='IecmL'></legend><bdo id='IecmL'><pre id='IecmL'><center id='IecmL'></center></pre></bdo></b><th id='IecmL'></th></span></q></dt></tr></i><div id='IecmL'><tfoot id='IecmL'></tfoot><dl id='IecmL'><fieldset id='IecmL'></fieldset></dl></div>
                              <tbody id='IecmL'></tbody>