在Python中,获取调用者信息对于调试、打印日志等非常有帮助,本文将介绍获取调用者信息的两种方法。
使用sys._getframe方法
1 2 3 4 5 6 7 8 9 10 11
| import sys
def print_caller_by_sys(): print(sys._getframe(1).f_code.co_filename)
print(sys._getframe(1).f_code.co_name)
print(sys._getframe(1).f_lineno)
|
使用inspect.stack方法
1 2 3 4 5 6 7 8 9 10 11
| import inspect
def print_caller_by_inspect(): print(inspect.stack()[1][1])
print(inspect.stack()[1][3])
print(inspect.stack()[1][2])
|
完整代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
|
import sys import inspect
def print_caller_by_sys(): print(sys._getframe(1).f_code.co_filename)
print(sys._getframe(1).f_code.co_name)
print(sys._getframe(1).f_lineno)
def print_caller_by_inspect(): print(inspect.stack()[1][1])
print(inspect.stack()[1][3])
print(inspect.stack()[1][2])
def show_caller(level=1): def show(func): def wrapper(*args, **kwargs): func(*args, **kwargs) print('{0.f_code.co_filename}:{0.f_code.co_name}:{0.f_lineno}'.format(sys._getframe(level))) return wrapper return show
@show_caller(1) def main(): print_caller_by_sys() print_caller_by_inspect()
if __name__ == '__main__': main()
|