当前位置: 首页 > news >正文

[python]上下文管理contextlib模块与with语句

文章目录

    • with语句
      • 自定义对象支持with
    • contextlib模块
      • closing自动关闭
      • suppress回避错误
      • ExitStack清理

Python 中的 with 语句用于清理工作,封装了 try…except…finally编码范式,提高了易用性。

with语句

with语句有助于简化资源管理:

# 离开作用域时,自动关闭文件
with open('hello.txt', 'w') as f:f.write('hello, world!')

自定义对象支持with

类只要实现上下文管理器,就可获得with支持:

  • 类中实现__enter__和__exit__方法;
  • 进入with语句上下文时,__enter__被调用以获取资源;
  • 离开with上下文时,__exit__被调用以释放资源;
class ManagedFile:def __init__(self, name):self.name = namedef __enter__(self):self.file = open(self.name, 'w')return self.filedef __exit__(self, exc_type, exc_val, exc_tb):if self.file:self.file.close()

contextlib模块

使用contextlib.contextmanager装饰器能够使函数(生成器)自动支持with语句:

  • 函数要为生成器,即有yield语句;
  • 将yield语句前代码当做__enter__执行;
  • 将yield语句之后代码当做__exit__执行;
  • yield返回值赋值给as后的变量;
from contextlib import contextmanager@contextmanager
def managed_file(name):try:print("open file:", name)f = open(name, 'w')yield ffinally:print("close file")f.close()with managed_file(r'D:\temp\hello.txt') as f:print("write file")f.write('hello world!')        

closing自动关闭

closing装饰器封装有close的类,在离开with作用域时自动调用close方法:

from contextlib import closing
from urllib.request import urlopenwith closing(urlopen("http://www.baidu.com")) as page:# get the page

suppress回避错误

suppress(*exceptions)可以禁止任意数目的异常:

# 文件不存在,也不会抛出异常
with suppress(FileNotFoundError):os.remove('somefile.tmp')

ExitStack清理

ExitStack可组合多个清理器,通过向栈中添加清理回调(enter_context),在离开with时统一清理:

# 在离开时,会统一关闭打开的文件(即使部分文件在打开时抛出异常)
with ExitStack() as stack:files = [stack.enter_context(open(fname)) for fname in filenames]

相关文章:

[python]上下文管理contextlib模块与with语句

文章目录with语句自定义对象支持withcontextlib模块closing自动关闭suppress回避错误ExitStack清理Python 中的 with 语句用于清理工作,封装了 try…except…finally编码范式,提高了易用性。with语句 with语句有助于简化资源管理: # 离开作…...

STM32之TIM编码器接口

编码器简介: 例子讲解:正交编码器有两个输出,一个A相,一个B相,AB接口输出正交信号。然后接入STM32的定时器的编码器接口,编码器接口自动控制定时器时基单元中的CNT计数器进行自增或自减,比如初始…...

b站第一,Python自动化测试实战详细教学,3天教你学会自动化测试

目录 简介 Python自动化测试概述 Python自动化测试目标 Python自动化测试流程 1. 测试计划和设计 2. 测试脚本开发 3. 测试执行和管理 4. 测试维护和优化 Python自动化测试最佳实践 Python自动化测试工具和框架 结论 简介 自动化测试是软件开发过程中一个必不可少的…...

刷题记录:P8804 [蓝桥杯 2022 国 B] 故障 条件概率

传送门:洛谷 题目描述: 题目较长,此处省略 输入: 3 5 30 20 50 0 50 33 25 0 30 0 35 0 0 0 0 0 25 60 1 3 输出: 2 56.89 1 43.11 3 0.00读完题目,我们会发现其实题目给了我们两个事件,并且这两个事件是相互关联的.因此不难想到使用条件概率 我们将故障原因看做事件AAA,结合…...

【算法】常用的基础数论

作者:指针不指南吗 专栏:算法篇 🐾或许会很慢,但是不可以停下🐾 文章目录1.GCD&LCM2.判断素数(质数)3.分解质因子1.GCD&LCM 最大公约数&最小共倍数 欧几里得算法——高效 //最大公约数 int gcd(int x,i…...

云原生场景下的容器网络隔离技术

云原生场景下的容器网络隔离技术 一、研究背景 随着云计算时代的到来,尤其是容器化技术的飞速发展,云原生作为云计算的未来阶段,其安全势必成为云安全的主要战场。从目前的云原生环境来看,云原生网络安全问题层出不穷&#xff0…...

用python绘制有向图

目录 添加边权重的有向图思路介绍代码实现效果图设置不同的样式节点和边的有向图思路介绍代码实现效果图下面的Python代码用于绘制有向图,其中使用了 networkx和 matplotlib.pyplot等库。 添加边权重的有向图 思路介绍 首先,创建了一个空的有向图像对象G,并添加了4个节点…...

Spring MongoDB 开发教程(一)—官方原版

MongoDB支持包含一系列功能:Spring配置支持基于Java的configuration类或Mongo驱动程序实例和副本集的XML命名空间。MongoTemplate帮助类,在执行常见的Mongo操作时提高生产力。包括文档和POJO之间的集成对象映射。将异常转换为Spring的可移植数据访问异常…...

数据结构——二叉搜索树

一、二叉搜索树概念 二叉搜索树又叫二叉排序树,它或是空树,或是具有以下性质的二叉树: (1)若它的左子树不为空,则左子树上的所有节点的值都小于根节点的值; (2)若它的…...

23年5月高项学习笔记3---项目管理概述

项目是创造独特的产品、服务或成果而进行的临时性的工作 独特:每个项目都不一样 可交付成果:某一过程,阶段或项目完成时形成的独特的并且可验证的产品、服务或成果。 临时的:明确的起点和终点、 -------- 项目集: 相…...

【组织架构】中国铁路成都局集团有限公司

0 参考 中国铁路成都局集团有限公司 1 公司介绍 中国铁路成都局集团有限公司,是中国国家铁路集团有限公司管理的18个铁路局集团有限公司之一,简称“成局”,地处中国西南,管辖范围辐射四川、贵州、重庆地区。管内地形复杂&#x…...

剧前爆米花--爪哇岛寻宝】java多线程案例——单例模式、阻塞队列及生产者消费者模型、定时器、线程池

作者:困了电视剧 专栏:《JavaEE初阶》 文章分布:这是关于java多线程案例的文章,进行了对单例模式、阻塞队列及生产者消费者模型、定时器和线程池的讲解,希望对你有所帮助! 目录 单例模式 懒汉模式实现 饿…...

Guitar Pro8中文版更新说明及系统要求介绍

Guitar Pro吉他软件是初学作曲,特别是同时又初学吉他的朋友们的良师益友,是一款极佳的初级软件,是非实时作曲软件之中的一件佳作。Guitar Pro在吉他和弦、把位的显示、推算、查询、调用等方面,也异常方便、简洁、直观和浩瀚&#…...

【id:19】【20分】A. 三数论大小(引用)

题目描述 输入三个整数,然后按照从大到小的顺序输出数值。 要求:定义一个函数,无返回值,函数参数是三个整数参数的引用,例如int &a, int &b, int &c。在函数内对三个参数进行排序。主函数调用这个函数进行…...

To_Heart—总结——FWT(快速沃尔什变换)

目录闲话拿来求什么或与异或闲话 这个比FFT简单了很多呢,,大概是我可以学懂的水平! 好像是叫 快速沃尔什变换 ? 拿来求什么 以 FFT 来类比。我们 FFT 可以在 O(nlogn)\mathrm{O(nlogn)}O(nlogn) 的复杂度下实现求解&#xff1…...

Google巨大漏洞让Win10、11翻车,小姐姐马赛克白打了

早年间电脑截图这项技能未被大多数人掌握时,许多人应该都使用过手机拍屏幕这个原始的方式。 但由于较低的画面质量极其影响其他用户的观感,常常受到大家的调侃。 但到了 Win10、11 ,预装的截图工具让门槛大幅降低。 WinShiftS 就能快速打开…...

腾讯云服务器部署内网穿透(让其他人在不同ip可以访问我们localhost端口的主机项目)(nps开源项目)

首先打开shell连接我们的云服务器 然后我们再opt目录下面创建一个文件夹用来存放我们的压缩包和文件 mkdir /opt/nps 这个是它官方的安装图解.所以我们按照这个docker安装过程来: 然后我们用docker安装镜像.这样的话比较简单一点 docker pull ffdfgdfg/nps 然后我们查看docker…...

IDS、恶意软件、免杀技术、反病毒技术、APT、对称加密、非对称加密以及SSL的工作过程的技术介绍

IDS的简单介绍IDS是:入侵检测系统(intrusion detection system,简称“IDS”)是一种对网络传输进行即时监视,在发现可疑传输时发出警报或者采取主动反应措施的网络安全设备。它与其他网络安全设备的不同之处便在于&…...

怎么把pdf转换成高清图片

怎么把pdf转换成高清图片?可以使用以下两种方法: 方法一:使用Adobe Acrobat Pro DC 1、打开需要转换的PDF文件,点击“文件”菜单中的“导出为”,在弹出的菜单中选择“图像”,然后选择“JPEG”。 2、在“…...

MATLAB 系统辨识 + PID 自动调参

系统辨识 PID 自动调参 文章目录系统辨识 PID 自动调参1. 导入数据1.1 从 Excel 中导入数据2. 系统辨识3. PID 自动调参1. 导入数据 1.1 从 Excel 中导入数据 如果不是从Excel中导入可以跳过该步骤 导入函数: [num,txt,raw]xlsread(xxx\xxx.xlsx);num返回的是…...

体验Taotoken聚合路由在单一模型临时故障时的自动容灾效果

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 体验Taotoken聚合路由在单一模型临时故障时的自动容灾效果 在实际的AI应用开发与集成过程中,服务的稳定性是开发者关注…...

为AI编码助手打造专业技能库:DSkills项目实战指南

1. 项目概述:为AI编码助手打造的专业技能库如果你和我一样,日常重度依赖Claude Code、Codex或者Gemini CLI这类AI编码助手来提升开发效率,那你肯定遇到过这样的场景:想让AI帮你搜索最新的技术文档,它却只能给出过时的信…...

Gemini应用商店曝光量暴跌?3步诊断+5个隐藏算法漏洞修复指南

更多请点击: https://intelliparadigm.com 第一章:Gemini应用商店曝光量暴跌?3步诊断5个隐藏算法漏洞修复指南 近期大量开发者反馈 Gemini 应用商店自然曝光量断崖式下跌,部分应用 7 日内曝光下降超 68%,但后台数据未…...

DeepSeek R1模型API接入全流程(含鉴权失效应急手册):企业级生产环境已验证

更多请点击: https://intelliparadigm.com 第一章:DeepSeek R1模型API接入全流程(含鉴权失效应急手册):企业级生产环境已验证 DeepSeek R1 是当前高性能开源大语言模型之一,其官方 API 提供稳定、低延迟的…...

告别MQTT!用Python Socket自建轻量数据通道,ESP32直连MySQL并更新网页状态

告别MQTT!用Python Socket自建轻量数据通道,ESP32直连MySQL并更新网页状态 在物联网项目开发中,MQTT协议因其轻量级和发布-订阅模式而广受欢迎。然而,当我们需要更精细地控制数据传输流程、减少中间件依赖或优化资源使用时&#x…...

来勒光电发布双FA自动耦合系统:突破硅光模块封装效率瓶颈

导读:来勒光电推出的双FA自动耦合系统,是一款专为高速光模块TX/RX端量身打造的高精度自动化耦合设备,以独特的双FA同步耦合设计、全流程无人化作业与模块化兼容能力,为800G/1.6T/3.2T光模块的规模化量产提供高效、稳定、智能的封装…...

Attu:向量数据库可视化管理工具的终极指南

Attu:向量数据库可视化管理工具的终极指南 【免费下载链接】attu The Best GUI for Milvus 项目地址: https://gitcode.com/gh_mirrors/at/attu 还在为复杂的向量数据库命令行操作而烦恼吗?Attu作为Milvus向量数据库的官方图形化管理工具&#xf…...

Lie群方法在机器人状态估计中的创新应用

1. 状态估计技术演进与Lie群方法的核心价值在机器人导航与定位领域,状态估计技术扮演着大脑的角色。想象一下,当你在陌生城市使用手机导航时,系统需要实时融合GPS、陀螺仪和加速度计的数据来确定你的位置——这正是状态估计的典型应用场景。传…...

3大技术创新:重新定义Windows Android生态的工具体验

3大技术创新:重新定义Windows Android生态的工具体验 【免费下载链接】wsa-toolbox A Windows 11 application to easily install and use the Windows Subsystem For Android™ package on your computer. 项目地址: https://gitcode.com/gh_mirrors/ws/wsa-tool…...

Windows平台iOS模拟器开发革命:ipasim如何让iOS应用在Windows上“原生“运行

Windows平台iOS模拟器开发革命:ipasim如何让iOS应用在Windows上"原生"运行 【免费下载链接】ipasim iOS emulator for Windows 项目地址: https://gitcode.com/gh_mirrors/ip/ipasim 嘿,开发者朋友们!你是否曾经梦想过在Win…...