python3 with.py

2023-11-16

"""
模块:python3 with.py
参考:
    https://docs.python.org/zh-cn/3/reference/compound_stmts.html#with
    https://docs.python.org/zh-cn/3/reference/datamodel.html#context-managers
    https://blog.csdn.net/lxy210781/article/details/81176687
知识点:
0.with 语句用于包装带有使用上下文管理器 (参见 with 语句上下文管理器 一节) 定义的方法的代码块的执行。
    with_stmt ::=  "with" with_item ("," with_item)* ":" suite
    with_item ::=  expression ["as" target]
    带有一个“项目”的 with 语句的执行过程如下:
        1.对上下文表达式 (在 with_item 中给出的表达式) 求值以获得一个上下文管理器。
        2.载入上下文管理器的 __enter__() 以便后续使用。
        3.载入上下文管理器的 __exit__() 以便后续使用。
        4.发起调用上下文管理器的 __enter__() 方法。
        5.如果 with 语句中包含一个目标,来自 __enter__() 的返回值将被赋值给它。
            注解: with 语句会保证如果 __enter__() 方法返回时未发生错误,则 __exit__() 将总是被调用。
                因此,如果在对目标列表赋值期间发生错误,则会将其视为在语句体内部发生的错误。
                参见下面的第 6 步。
        6.执行语句体。
        7.发起调用上下文管理器的 __exit__() 方法。
            如果语句体的退出是由异常导致的,则其类型、值和回溯信息将被作为参数传递给 __exit__()。
            否则的话,将提供三个 None 参数。

            如果语句体的退出是由异常导致的,并且来自 __exit__() 方法的返回值为假,则该异常会被重新引发。
            如果返回值为真,则该异常会被抑制,并会继续执行 with 语句之后的语句。

            如果语句体由于异常以外的任何原因退出,则来自 __exit__() 的返回值会被忽略,
            并会在该类退出正常的发生位置继续执行。

    实例:
        1.with EXPRESSION as TARGET:
            SUITE
        2.如果有多个项目,则会视作存在多个 with 语句嵌套来处理多个上下文管理器:
            with A() as a, B() as b:
                SUITE
            在语义上等价于:
                with A() as a:
                    with B() as b:
                        SUITE

1.with 语句上下文管理器
    上下文管理器 是一个对象,它定义了在执行 with 语句时要建立的运行时上下文。
    上下文管理器处理进入和退出所需运行时上下文以执行代码块。
    通常使用 with 语句(在 with 语句 中描述),但是也可以通过直接调用它们的方法来使用。

    上下文管理器的典型用法包括保存和恢复各种全局状态,锁定和解锁资源,关闭打开的文件等等。
    object.__enter__(self)
        进入与此对象相关的运行时上下文。
        with 语句将会绑定这个方法的返回值到 as 子句中指定的目标,如果有的话。

    object.__exit__(self, exc_type, exc_value, traceback)
        退出关联到此对象的运行时上下文。
        各个参数描述了导致上下文退出的异常。
        如果上下文是无异常地退出的,三个参数都将为 None。

        如果提供了异常,并且希望方法屏蔽此异常(即避免其被传播),则应当返回真值。
        否则的话,异常将在退出此方法时按正常流程处理。

        请注意 __exit__() 方法不应该重新引发被传入的异常,这是调用者的责任。
"""
# 1.f 绑定了一个上下文管理器。
#   此处会自动调用文件的 close()。
with open(r'./明白牌.txt', 'r', encoding="utf-8") as f:
    data = f.read()
# print("data:", data)
print(f.closed)
f = open("cs.txt")
print(f.closed)
# True
# False
#
# Process finished with exit code 0

# 2.无异常发生
class Test:
    def __enter__(self):
        print('__enter__() is called!')
        return self

    def dosomething(self):
        print('do some thing!')

    def __exit__(self, exc_type, exc_value, traceback):
        print(f'type:{exc_type}')
        print(f'value:{exc_value}')
        print(f'trace:{traceback}')
        print('__exit()__ is called!')


print("\n2.")
with Test() as sample:
    sample.dosomething()


# __enter__() is called!
# do some thing!
# type:None
# value:None
# trace:None
# __exit()__ is called!

# 3.有异常发生时,会抛出异常的例子。
class Test:
    def __enter__(self):
        print('__enter__() is called!')
        return self

    def dosomething(self):
        # x = 1 / 0
        print('do some thing!')

    def __exit__(self, exc_type, exc_value, traceback):
        print(f'type:{exc_type}')
        print(f'value:{exc_value}')
        print(f'trace:{traceback}')
        print('__exit()__ is called!')


print("\n3.")
with Test() as sample:
    sample.dosomething()


# __enter__() is called!
# type:<class 'ZeroDivisionError'>
# value:division by zero
# trace:<traceback object at 0x000001B2B622AA80>
# __exit()__ is called!
# Process finished with exit code 1

# 4.有异常发生时,不抛出异常的例子:
class Test:
    def __enter__(self):
        print('__enter__() is called!')
        return self

    def dosomething(self):
        x = 1 / 0
        print('do some thing!')

    def __exit__(self, exc_type, exc_value, traceback):
        print(f'type:{exc_type}')
        print(f'value:{exc_value}')
        print(f'trace:{traceback}')
        print('__exit()__ is called!')
        return True


print("\n4.")
with Test() as sample:
    sample.dosomething()
# __enter__() is called!
# type:<class 'ZeroDivisionError'>
# value:division by zero
# trace:<traceback object at 0x0000013DCDE4C040>
# __exit()__ is called!
# Process finished with exit code 0




本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python3 with.py 的相关文章

  • Python3 中 bytes 和 string 之间的互相转换

    因为这是原来不知道 Markdown 时写的文章 富文本编辑器不知道怎么用脚注 所以参考资料显得有些孤立了 见谅 Table of Contents 前言 创建 bytes 型数据 创建字符串 相互转换 string to bytes 按
  • Python3之优化邮件中发送HTMLTestRunner生成的报告加附件

    系列文章目录 提示 这里可以添加系列文章的所有文章的目录 目录需要自己手动添加 例如 第一章 Python 机器学习入门之pandas的使用 提示 写完文章后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 系列文章目录 前言 一
  • 解决Python代码编码问题 SyntaxError: Non-UTF-8 code starting with '\xc1'

    学习编写Py程序时突然报错 SyntaxError Non UTF 8 code starting with xbb in file C Users v Desktop Test py on line 4 but no encoding d
  • 【Python 1-14】Python手把手教程之——详解函数的高级用法

    作者 弗拉德 来源 弗拉德 公众号 fulade me 传递列表 你经常会发现 向函数传递列表很有用 这种列表包含的可能是名字 数字或更复杂的对象 如字典 将列表传递给函数后 函数就能直接访问其内容 下面使用函数来提高处理列表的效率 假设有
  • 【2019.05.26】JS逆向——破解 企名片 参数(encrypt_data)爬虫 超级详细

    参考这个博客 作者写的很流畅 一看就是个大佬 要向大佬学习 企名片地址 要获取图中数据 分析请求 根据大佬博客的点拨 我们可以知道这个网站的数据都在这个参数当中 要获取这些数据 我们需要这个网页是怎么把这一段参数解析的 解析参数 encry
  • python openpyxl的简单使用和设置单元格背景色

    def pyxl execl import openpyxl wb openpyxl Workbook ws wb active ws title 麦嘎 data 1 2 3 4 djdj dkdk djdj 23 98 dk kdkd f
  • python3.6打包成exe可执行文件,已解决方案

    将python程序打包成exe可执行文件有多种方法 这里讲一种最简单最常用的方法 只需要使用pyinstaller命令即可 一 环境 Windows 7或10 x64 Python 3 6 1 二 需要包 pyinstaller 3 3 p
  • skimage的简介

    skimage的简介 skimage即是Scikit Image 基于python脚本语言开发的数字图片处理包 比如PIL Pillow opencv scikit image等 PIL和Pillow只提供最基础的数字图像处理 功能有限 o
  • pycharm所有版本 http://www.jetbrains.com/pycharm/download/previous.html 打开激活窗口 选择 Activate new license

    pycharm所有版本 http www jetbrains com pycharm download previous html 打开激活窗口 选择 Activate new license with License server 用li
  • Python项目:学生信息管理系统(完整版)

    本文是基于上一篇 python项目 学生信息管理系统 初版 进行了完善 并添加了新的功能 主要包括有 完善部分 输入错误 无数据查询等异常错误 新的功能 文件的操作 文件的读写 其中重点是对文本字符串的详细解析 关于整个解析拆解和重组详见代
  • Windows7(x64) 安装Python3.7.0

    日期 2018年8月8日 作者 Commas 注释 本文写Windows7 x64 安装Python3 7 0 讲述了基本的安装操作 同时也介绍了一些相关的基础知识 本文若有哪些地方写的有所纰漏 还望各位看客指出 谢谢 如果您想了解更多有关
  • 如何在 CentOS/RHEL 7 和 Fedora 上安装 Python 3.9

    Python 是一种非常流行 用途广泛且易于学习的编程语言 广泛应用于从 Web 开发和数据分析到人工智能和机器学习的各个行业和应用程序 Python 3 9 是该语言的最新版本之一 提供了改进的性能和许多新功能 在本教程中 我们将指导您完
  • python3 模块、import、from import

    模块 1 模块就是 py后缀的文件 2 py文件类似于一个类 包含以下部分 1 导入 一般的类都有导入 2 变量 对应类的属性 3 函数 对应类的方法 4 类 对应内部类 5 if name main 对应主函数 6 顶格写的代码段 对应构
  • python3 sys.argv.py

    模块 01 sys argv py 功能 获取命令行参数 参考 https www runoob com python3 python3 command line arguments html 命令行 python 01 sys argv
  • python 头条 sign 参数 此篇针对实时列表 请使用73版本的谷歌浏览器

    1 首先谷歌浏览器打开今日头条F12调试找到sources 以旅游模块为例以此类推都一样 网站如https www toutiao com ch news travel 2 ctrl shift f全局搜索 window byted acr
  • python线程与进程概述_1.24

    多进程与多线程 进程 Process 是计算机中的程序关于某数据集合上的一次运行活动 是系统进行资源分配和调度的基本单位 是操作系统结构的基础 线程 Thread 有时被称为轻量级进程 Lightweight Process LWP 是程序
  • Python3之异常with语句

    高级语法之异常with 语法 with 表达式1 as 变量1 表达式2 as 变量2 语句块 with的作用 使用于对资源进行访问的场合 确保使用过程中不管是否发生异常都会执行必须的 清理 操作 并释放资源 如 文件打开后自动关闭 线程中
  • python3 No module named 'PIL'

    在python3 scrapy框架已经安装好的情况下 还是出现了 python3 No module named PIL 在Python3下 PIL已经被Pillow替代了 所以只需要安装Pillow就可以了 使用命令 pip3 insta
  • python request要求接口参数必须是json数据

    Reqeusts支持以form表单形式发送post请求 只需要将请求的参数构造成一个字典 然后传给requests post 的data参数即可 data参数的格式如下 content type在header中设置 1 data为dict时
  • Python3 configparse模块(配置)

    Python3 configparse模块 配置 参考 https www cnblogs com bert227 p 9326313 html https www cnblogs com dion 90 p 7978081 html py

随机推荐

  • mysql插入新字段方法

    MySQL 允许在开头 中间和结尾处添加字段 一 开头 MySQL 默认在表的最后位置添加新字段 开头位置 第一列的前面 添加新字段 那么可以使用 FIRST 关键字 ALTER TABLE lt 表名 gt ADD lt 新字段名 gt
  • PAT C入门题目-7-19 计算天数 (15 分)

    7 19 计算天数 15 分 本题要求编写程序计算某年某月某日是该年中的第几天 输入格式 输入在一行中按照格式 yyyy mm dd 即 年 月 日 给出日期 注意 闰年的判别条件是该年年份能被4整除但不能被100整除 或者能被400整除
  • 图数据库(十二):Neo4j中数据类型及部分数据类型转换函数

    数据类型可以分为三大类 属性类型 数值类 Integer 和 Float 字符类 String 布尔类 Boolean 空间类 Point 时间类 Date Time LocalTime DateTime LocalDateTime 和 D
  • ChatGPT中文版Prompt提示工程超详细指南《提示工程高级技巧与技术》Github最新破万星项目Meta AI前工程师解密百万年薪提示工程师GPT-4模型优化利器(二)不定期更新

    提示工程高级技巧与技术 前言 Introduction 导言 零样本提示 少样本提示 少样本提示的限制 Chain of Thought Prompting 链式思考 CoT 提示 零样本COT提示 Zero shot COT 自我一致性
  • 【华为OD机试真题 JAVA】最长的指定瑕疵度的元音子串

    JS版 华为OD机试真题 JS 最长的指定瑕疵度的元音子串 标题 最长的指定瑕疵度的元音子串 时间限制 1秒 内存限制 262144K 语言限制 不限 开头和结尾都是元音字母 aeiouAEIOU 的字符串为 元音字符串 其中混杂的非元音字
  • 微信小程序中如何实现微信支付

    微信支付是微信公众平台提供的一种在线支付服务 可以为用户提供快速 方便 安全的支付体验 而在微信小程序中实现微信支付 则可以为应用程序提供更多的功能和服务 提高用户体验和商业价值 因此 在本文中 我们将介绍如何在微信小程序中实现微信支付 步
  • 轻量级linux桌面环境,Linux发行版最为轻量级的桌面环境之一Xfce 桌面

    开源多样性应该是 Linux 最好的特性之一 用户可以不断尝试各种自己喜欢的新鲜玩法与花样 并从中选择最适合自己的应用 无论你是 Linux 新人还是老鸟 层出不穷的应用和桌面环境可能都会让我们应接不暇 特别是尝试不同的 Linux 桌面环
  • Android之仿今日头条顶部导航栏效果

    随着时间的推移现在的软件要求显示的内容越来越多 所以要在小的屏幕上能够更好的显示更多的内容 首先我们会想到底部菜单栏 但是有时候像今日头条新闻客户端要显示的内容太多 而且又想在主界面全部显示出来 所以有加了顶部导航栏 今日头条顶部导航栏区域
  • 报错: org.springframework.boot.builder.SpringApplicationBuilder.([Ljava/lang/Object;)V

    springboot中引入eureka报错 java lang NoSuchMethodError org springframework boot builder SpringApplicationBuilder
  • 事件驱动型状态机EFSM介绍及C语言实现

    一 什么是状态机 有限状态机 英语 Finite state machine FSM 又称有限状态自动机 简称状态机 是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型 有限状态机是一种用来进行对象行为建模的工具 其作用主要是描
  • 解决 010Edittor 复制问题

    遇到的问题 使用010Edittor做CTF题目的时候 复制Nex Text File 复制的内容在右边 解决方法 如果要复制到左边是复制的问题 需要ctrl shift c 然后ctrl shift v粘贴即可 具体操作如下 这边复制过来
  • iOS动画 ---特殊Layer动画

    iOS动画 特殊Layer动画 iOS中有一些特殊的layer 也可以做一些动画效果 本文就补充两个可以做动画效果的layer CAEmitterLayer 和 CAReplicatorLayer CAEmitterLayer Emitte
  • Android性能优化系列:Bitmap

    文章目录 Bitmap 简介 Bitmap 的创建 不同系统版本 Bitmap 的内存分配策略 Bitmap 内存占用计算 在电脑查看的图片大小和运行内存大小区别 图片占用内存计算 Bitmap 内存优化 inJustDecodeBound
  • 448. Find All Numbers Disappeared in an Array

    查找缺失的数据 相似的题目查看如下链接的基本情况 448 查找缺失的数据 442 Find All Duplicates in an Array 先解决查找数组当中相同的元素 这道题目是442的 如何查找出数组当中出现多次的元素 这就是桶排
  • js三种声明方式

    JS中声明函数大体上有三种方法 1 常规方法 JScript code function funcName var1 var2 add you code here 2 匿名函数引用法 找不到具体的称呼 暂且先这么叫 JScript code
  • 系统远程安装

    一 现有如下需求 1 分行有20台左右瘦客户机 一台文员机 2 在总部可以通过控制台 控制软件 统一管理控制这20台瘦客户机 文员机可以通过远程桌面控制 3 现需要统一给分行这20台瘦客户机升级系统 二 解决思路 1 将新系统 Ghost文
  • phpstorm安装、汉化以及搭配WampServer使用的细节说明

    phpstorm安装 汉化以及搭配WampServer使用的细节说明 一 简介 底层嵌入式软件是用c语言写的 但是上层的应用网页是用HTML PHP写的 这就造成嵌入式软件和网页需要进行数据交互来进行通信 为了保证安全性和系统结构清晰 便于
  • VMware16 安装windows_10

    一 镜像下载 1 Windows 镜像文件 cn windows 10 multiple editions version 1703 updated march 2017 x64 dvd 10194190 iso下载 迅雷下载 ed2k f
  • citespace使用教程系列文章:二、关键词聚类图

    关键词聚类图 上一章citespace安装和关键词共现图已经讲了软件安装和关键词共现 本文我们讲一下怎么做关键词聚类分析 1 接着上一篇文章继续以下操作 点击下图圈中的图标 进行关键词聚类 2 点击之后 将得到下图的结果 可以看见以 号开头
  • python3 with.py

    模块 python3 with py 参考 https docs python org zh cn 3 reference compound stmts html with https docs python org zh cn 3 ref