Python中打印日志,文件,行号,当前时间

本文介绍了一个简单的Python函数用于记录日志,该函数能够输出当前时间、代码行号及函数名,方便开发者进行错误定位。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写一个函数实现python的日志功能:

调用函数,打印当前时间,打印当前行号,文件函数名称

便于找bug

import sys,time

def Log(msg,line,name):
    #文件地址  __file__,可选添加
    date = time.strftime('%Y.%m.%d %H:%M:%S ',time.localtime(time.time()))
    print(date+':'+ msg +', Line '+line+' , in '+name)

if __name__ == '__main__':
    Log('hello',str(sys._getframe().f_lineno),sys._getframe().f_code.co_name) 

#2022.03.25 11:52:15 :hello, Line 9 , in <module>

打印结果:2022.03.25 11:52:15 :hello, Line 9 , in <module>

Python 中获取并打印代码的当前行号,可以使用 `inspect` 模块、`traceback` 模块或 `sys` 模块来实现。以下是几种常见的方法及其示例代码。 ### 方法一:使用 `inspect` 模块 `inspect` 模块提供了访问当前帧对象的功能,通过 `f_lineno` 属性可以获取当前行号。 ```python import inspect def print_current_line(): frame = inspect.currentframe() lineno = frame.f_back.f_lineno # 获取调用此函数的上一行的行号 print(f"当前代码行号: {lineno}") print_current_line() ``` 这种方法适用于动态获取行号,并且能够准确地返回调用位置的行号[^1]。 ### 方法二:使用 `sys` 模块 `sys` 模块中的 `_getframe()` 函数可以获取当前帧信息,结合 `f_lineno` 属性可以得到当前行号。 ```python import sys def PRINT(string): print('func:{}(), line:{},'.format(sys._getframe().f_code.co_name, sys._getframe().f_lineno), end="") print(string) PRINT("help :%d" % 123654) ``` 这种方法简单易用,适合在调试或日志记录时使用[^2]。 ### 方法三:使用 `traceback` 模块 `traceback` 模块主要用于处理异常堆栈信息,但也可以用来获取当前行号。 ```python import traceback def print_traceback_line(): stack = traceback.extract_stack() filename, lineno, func_name, text = stack[-2] # 获取倒数第二行(即调用此函数的行) print(f"当前代码行号: {lineno}") print_traceback_line() ``` 虽然 `traceback` 模块更适合处理异常,但它也能提供精确的行号信息[^2]。 ### 方法四:直接在代码中使用 `__file__` 和 `sys._getframe()` 如果需要同时打印文件名和行号,可以结合 `__file__` 和 `sys._getframe()`: ```python import sys def ShowMsg(msg): print(f"{msg} - 文件: {sys._getframe(1).f_code.co_filename}, 行号: {sys._getframe(1).f_lineno}") ShowMsg("这是一个测试消息") ``` 这种方法常用于调试信息输出或日志记录[^4]。 ### 注意事项 - 如果仅需要获取行号而不涉及复杂逻辑,推荐使用 `sys._getframe()` 或 `inspect` 模块。 - 在多线程环境中,确保帧对象不会被意外修改或释放。 - 使用 `traceback` 模块时需注意性能开销,因为它会解析整个堆栈信息。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值