Python - inspect 模块的简单使用
Python中的inspect模块解析
Python的inspect模块是一个强大的内省工具,允许开发者检查(inspect)活动对象和源代码。它提供了一系列函数,用于获取信息关于正在运行的程序和调用堆栈,非常适合进行调试和动态分析。本文将通过介绍inspect模块的关键功能,并结合实际案例代码,来探索其在日常开发中的应用。
常用方法
1. 获取当前执行的函数或方法名、文件路径【并不是调用方】
在日志记录或调试时,知道当前执行的函数名是非常有用的
import inspect
def who_am_i():
# 输出当前文件绝对路径
print(inspect.currentframe().f_code.co_filename)
return inspect.currentframe().f_code.co_name
print(who_am_i()) # 输出: who_am_i

个人认为比较有用的就是 co_filename、co_name
2. 获取调用者信息
获取当前函数或方法的调用者信息
import inspect
def caller_info():
frame = inspect.currentframe().f_back
print(f调用者 {frame.f_code.co_filename} 调用行号 d{frame.f_lineno}")
def test():
caller_info() # 调用以获取调用者信息
test()
这个例子显示了如何获取调用当前函数的代码位置,非常有助于调试复杂的调用链
3. 查看函数参数
inspect模块可以用来检查函数或方法的参数,这对于动态分析和生成文档非常有用
import inspect
def sample_function(name, age=25):
pass
sig = inspect.signature(sample_function)
print(sig) # 输出: (name, age=25)
4. 获取源代码
inspect还可以用来获取函数、类或模块的源代码
import inspect
def my_function():
"""A simple function."""
pass
print(inspect.getsource(my_function))
5. 检查类和实例
inspect模块提供了多种方式来检查类和实例,比如获取类的所有方法、属性等
class MyClass:
def method_one(self):
pass
def method_two(self):
pass
# 获取类的所有成员方法
methods = inspect.getmembers(MyClass, predicate=inspect.isfunction)
print(methods) # 输出 MyClass 中定义的方法
实际案例:自动化场景下的应用
一个常见的使用场景是动态地调用函数或方法,并基于它们的签名自动生成文档。
def test():
# 获取调用方
frame = inspect.currentframe().f_back
# 获取调用方文件绝对路径
caller_file = inspect.getfile(frame)
# 这种方式也可以
caller_file = frame.f_code.co_filename
...
params = [
caller_file,
"--env-data",
env_data.json(),
f"--count={count}",
"-m",
mark,
]
一个基于 Pytest 自动化测试项目
- 每个 py 模块都会调用这个方法来执行 Pytest 命令来跑测试用例
- 那怎么才能准确知道要跑哪个文件呢?
- 通过第一、二行代码即可
更便捷的方式
Python - inspect 模块的简单使用的更多相关文章
- python inspect 模块 和 types 模块 判断是否是方法,模块,函数等内置特殊属性
python inspect 模块 和 types 模块 判断是否是方法,模块,函数等内置特殊属性 inspect import inspect def fun(): pass inspect.ism ...
- Python Logging模块的简单使用
前言 日志是非常重要的,最近有接触到这个,所以系统的看一下Python这个模块的用法.本文即为Logging模块的用法简介,主要参考文章为Python官方文档,链接见参考列表. 另外,Python的H ...
- python——inspect模块
inspect模块常用功能 import inspect # 导入inspect模块 inspect.isfunction(fn) # 检测fn是不是函数 inspect.isgenerator((x ...
- python inspect.stack() 的简单使用
1. #python # -*- encoding: utf-8 -*- #获取函数的名字 import inspect def debug(): callnamer = inspect.stack( ...
- Python第三方模块--requests简单使用
1.requests简介 requests是什么?python语言编写的,基于urllib的第三方模块 与urllib有什么关系?urllib是python的内置模块,比urllib更加简洁和方便使用 ...
- 用python socket模块实现简单的文件下载
server端: # ftp server端 import socket, os, time server = socket.socket() server.bind(("localhost ...
- python optparse模块的简单用法
# coding = utf-8 from optparse import OptionParser from optparse import OptionGroup usage = 'Usage: ...
- Python Turtle模块的简单应用
时钟 import turtle as t import datetime as dt #画出背景 game = t.Screen() game.bgcolor("white") ...
- 浅谈Python时间模块
浅谈Python时间模块 今天简单总结了一下Python处理时间和日期方面的模块,主要就是datetime.time.calendar三个模块的使用.希望这篇文章对于学习Python的朋友们有所帮助 ...
- 简单认识python cmd模块
0X00 前言 在早前用别人的工具时,发现有些大佬会用到交互式shell,那时候就挺好奇的,但是一直都没有看一下怎么做到的. 今天在翻p牛的博客的时候,看到他早之前写的一个工具就有用到交互式shell ...
随机推荐
- .NET 9 首个预览版发布:瞄准云原生和智能应用开发
前言 前不久.NET团队发布了.NET 9 的首个预览版,并且分享.NET团队对 .NET 9 的初步愿景,该愿景将于今年年底在 .NET Conf 2024 上发布.其中最重要的关注领域是:云原生和 ...
- SpringCloud 注册中心Consul实战
介绍 Consul是HashiCorp公司推出的开源工具,Consul由Go语言开发,部署起来非常容易,只需要极少的可执行程序和配置文件,具有绿色.轻量级的特点.Consul是分布式的.高可用的. 可 ...
- Redis客户端汇总
编程客户端 已经支持了许多编程语言,详见:https://redis.io/docs/clients/ 图形客户端 1.Another Redis Desktop Manager 支持哨兵, 集群, ...
- 一次nginx返回422状态码的经历
故事背景 后端使用Docker Compose部署一个代码片段管理应用:snibox,某天因为云服务卡死重启之后再次访问时,登录或退出都返回422状态码. 界面提示如下: 不过奇怪的是:直接通过IP+ ...
- goroutine并发
每一个并非的执行单元叫作一个goroutine.设想这里的一个程序有两个函数,一个函数做计算,另一个输出结果,假设两个函数没有相互之间的调用关系.一个线性的程序会先调用其中的一个函数,然后再调用另一个 ...
- glob模块(匹配所有符合条件的文件)
函数功能介绍 匹配所有的符合条件的文件,并将其以list的形式返回. 通配符 "*":匹配零个或多个字符 "?":匹配任何单个字符 "[]" ...
- 【Azure APIM】APIM 策略语句如何读取请求头中所携带的Cookie信息并保存为变量
问题描述 需要在APIM策略中对请求所携带的Cookie中的token值进行JWT验证,如果获取Cookie中的值并且作为变量保存,然后在JWT 验证中使用呢? 问题解答 第一步:获取Cookie中的 ...
- 【Azure 应用服务】部署WAR包到App Service访问出现404错误的解决方式
问题描述 在Linux的App Service上,通过FTP把war文件和HTML静态文件上传到wwwroot目录下,静态文件访问成功,但是java应用中的请求都返回404错误 问题解决 因为FTP上 ...
- 【Azure 事件中心】开启 Apache Flink 制造者 Producer 示例代码中的日志输出 (连接 Azure Event Hub Kafka 终结点)
问题描述 Azure Event Hub 在标准版以上就默认启用的Kafka终结点,所以可以通过Apache Kafka协议连接到Event Hub进行消息的生产和消费.通过示例代码下载到本地运行后, ...
- Nebula Graph 的 KV 存储分离原理和性能测评
本文首发于 Nebula Graph Community 公众号 1. 概述 过去十年,图计算无论在学术界还是工业界热度持续升高.相伴而来的是,全世界的数据正以几何级数形式增长.在这种情况下,对于数据 ...