`

python 获取 当前行号,函数名称, 文件名

阅读更多
博客http://blog.csdn.net/ksearch/article/details/23131269
中介绍了使用sys._getframe()方法获取行号等信息的方法,
但是知乎上有人说这些方法不在python标准内,
这里采用traceback模块实现

我们平时所见的stack trace就是通过traceback模块实现的,比如:
def test_traceback():
    import traceback
    traceback.print_stack(limit=2) # 打印函数调用堆栈
    traceback.print_exc() # 无异常时为None
    info = traceback.extract_stack(limit=2)  #返回调用堆栈(一个list),最多两层, 其中最后一个元素为当前行的信息,包括(文件名,行号,函数名,这一行的代码)
    print(info)

输出为:
引用
[('/***/ScriptInfo.py', 59, '<module>', 'test_traceback()'), ('/***/ScriptInfo.py', 56, 'test_traceback', 'info = traceback.extract_stack(limit=2)')]


有了以上的知识, 就可以自定义带行号等信息的print 语句了:
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function

import traceback
def _stack_tuple_to_function_line_filename(stackTuple):
    ''' stackTuple: (文件名,行号,函数名,这一行的代码)
    '''
    filename = stackTuple[0]
    linenumber = stackTuple[1]
    funcname = stackTuple[2]
#     codeline=stackTuple[3]
    return 'func: %s,  \t\tline: %d,  \tfile: %s' % (funcname, linenumber, filename);

def get_filename_function_line(limit=1):  # limit = 1 表示抽取该函数调用者的位置,注意输入到extract_stack中的limit=limit+1
    stackTuple = traceback.extract_stack(limit=limit + 1)[0]
    return _stack_tuple_to_function_line_filename(stackTuple)

def print_with_pos(*args, **kwargs):  #输出语句,同print,只是之后会再输出位置信息
    print(*args, **kwargs)
    print('\t%s' % get_filename_function_line(limit=2))


特殊的使用方法
from */ScriptInfo.py import print_with_pos as print
则,所有的print语句都带信息了
分享到:
评论

相关推荐

    python获取当前运行函数名称的方法实例代码

    在Python编程中,有时我们需要获取当前正在执行的函数的名称,这对于调试、日志记录或者追踪代码流程非常有用。虽然Python不像C/C++那样提供直接的`__FILE__`, `__FUNCTION__`, 和 `__LINE__`宏来获取这些信息,但是...

    Python实现获取当前目录下文件名代码详解

    ### Python 实现获取当前目录下文件名代码详解 #### 一、引言 在日常工作中,经常需要批量处理文件或者统计文件数量等信息。利用Python的强大功能,我们可以轻松地完成这些任务。本篇文章将详细介绍如何使用Python...

    使用文件IO实现“每隔1秒向文件1.txt写入当前系统时间,行号递增”

    - **打开文件**:在Python中,我们可以使用`open()`函数来打开文件,通常需要指定文件名和模式。在这个例子中,我们需要写入数据,所以模式应设为`'w'`(写入)或`'a'`(追加)。如果选择`'w'`,每次打开时会清空...

    FileSort_python读取Landsat影像_按时间排序_

    5. 排序:将所有文件名(连同其对应的日期对象)放入一个列表,并使用Python的`sorted`函数按照日期进行排序。可以自定义排序键(key),如`lambda x: x[1]`,这里`x[1]`代表日期对象。 6. 输出结果:最后,可以...

    3 数据获取与表示

    - **打开文件**:使用`open()`函数来打开文件,该函数至少需要两个参数:文件名和模式。例如: ```python f1 = open('d:\\infile.txt') f2 = open(r'd:\outfile.txt', 'w') f3 = open('record.dat', 'wb', 0) `...

    python习题

    10. **用户交互**:通过`raw_input()`函数(Python 2.x)或`input()`函数(Python 3.x)从用户那里接收输入,例如获取文件名和行数。 以上是Python文件操作的基本概念和示例,它们涵盖了读取文件、处理文件内容、...

    Python_editplus.pdf

    当Python程序运行出错时,解释器会显示错误信息,包括文件名、行号和错误类型。为了能像其他编译器一样直接点击错误信息跳转到相应行,我们需要启用EditPlus的“输出模式”功能。在“首选项”中勾选“捕获输出”选项...

    python调试之pdb.docx

    - `b &lt;文件名&gt;:&lt;行号&gt;`:在指定文件的指定行设置断点。 - `b &lt;函数名&gt;`:在指定函数的第一行设置断点。 - `cl` 或 `clear`:清除所有断点。 - `cl n1 n2`:清除编号为n1和n2的断点。 - `condition`:设置断点条件,...

    Python DataFrame 设置输出不显示index(索引)值的方法

    关于Python中DataFrame对象输出时不显示索引值的方法,实际上这是一个在数据分析和处理中非常常见且实用的技术点。...在编写代码时,使用准确的函数名、参数名、文件名等是非常重要的,它们直接影响到代码的运行结果。

    python 扩展print打印文件路径和当前时间信息的实例代码

    具体来说,nb_print函数通过sys._getframe()方法获取当前调用print的代码行号和文件名。然后利用time模块中的strftime方法,按照特定格式(例如小时、分钟、秒)获取并输出当前时间。 此外,为了更好地展示如何使用...

    Python_editplus[归纳].pdf

    在`Menu text`填写"python",在`Command`中填写Python解释器的安装路径,`Argument`设置为`$(FileName)`,表示当前打开的文件名,`Initial Directory`设为`$(FileDir)`,即当前文件所在的目录。完成这些设置后,你...

    Python项目源码64_Python分块拆分txt文件中的数据.rar

    如果需要将数据写入多个文件,可能使用了文件名生成逻辑,例如基于行号或数据内容生成不同的输出文件。 6. **异常处理**:在处理大型文件时,错误和异常的可能性增加。项目可能包含了异常处理代码,如`try/except`...

    python读取excel数据.zip

    在Python编程语言中,读取Excel数据是一项常见的任务,尤其在数据分析、报表处理或数据导入导出场景下。...在实际工作中,还可以结合其他pandas函数进行数据清洗、分析和可视化,使Python成为处理Excel数据的强大工具。

    Python源码自动办公-33 Python分块拆分txt文件中的数据.rar

    例如,如果每个块包含1000行,我们可以通过`[start:end]`的方式获取每一块数据,其中`start`和`end`分别代表块的起始和结束行号。 然后,我们讨论如何将拆分后的数据块写入新的txt文件。可以使用`open()`函数创建新...

    python第七次实验报告.docx

    - `os.walk(dir_path)`: 此函数用于迭代目录树,返回一个三元组`(dirpath, dirnames, filenames)`,分别代表当前目录路径、当前目录下的子目录名列表和文件名列表。 - 使用`for`循环遍历`os.walk()`生成器,检查`...

    NOTEPAD配置PYTHON开发环境.pdf

    如果你发现文件或目录在NOTEPAD++的安装目录下生成,那可能是因为Python解释器没有正确识别当前工作目录。在这种情况下,可以通过在`os.chdir()`函数中更改工作目录来解决。 总的来说,配置NOTEPAD++作为Python开发...

    python-编辑器,IDLE,VIM,Editplus.pdf

    然后在`Output Pattern`对话框中,取消`Use default output pattern`,并按照正则表达式`File "(.+)", line ([0-9]+)`配置,关联`Tagged expression 1`为文件名,`Tagged expression 2`为行号。这样,双击错误信息...

    Python如何获取文件指定行的内容

    1. 如果提供的文件名不在当前工作目录下,它会在`sys.path`列表中查找文件。 2. 如果请求的行号超过了文件的实际行数,函数会返回一个空字符串,而不是抛出异常。 3. 如果文件不存在,函数同样返回空字符串,而不是...

    Python-高效使用pdb的一个简单的教程

    - 在命令行中输入`b 文件名:行号`,例如`b my_script.py:20`,设置指定文件的断点。 四、查看调用栈 - `bt`(backtrace):显示调用栈,帮助理解当前执行的上下文。 - `up`/`down`:向上/向下遍历调用栈,查看不同...

    Python文件操作和异常处理.docx

    在文件操作中,它可能被用来获取文件的行数或者某个字符串的长度。 - `max()`:此函数用于找出一组可比较对象中的最大值。在文件处理中,它可能用于找出最长的行。 - `enumerate()`:这个函数将一个可遍历的数据...

Global site tag (gtag.js) - Google Analytics