 
在Python中,获取调用者信息对于调试、打印日志等非常有帮助,本文将介绍获取调用者信息的两种方法。
使用sys._getframe方法
| 12
 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方法
| 12
 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])
 
 | 
完整代码
| 12
 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()
 
 |