Python with语句用法原理详解
作者:LexiCalibur 发布时间:2023-05-01 08:17:27
标签:Python,with
with 用法理解
Overview
with 与with之后的object一起,起到了抛出异常和单独生成一个空间让代码在空间里运行的效果。
实验代码
class A:
def __init__(self):
self.a = 0
def __enter__(self):
print('enter')
def __exit__(self, exc_type, exc_val, exc_tb):
print('exit')
if __name__ == '__main__':
a = A()
with a:
print('first step')
print(1/0)
print('last setp')
print('continue running')
print('continue running')
print('continue running')
print('continue running')
上述代码输出结果为
enter
first step
exit
ZeroDivisionError: division by zero
代码理解
根据上述代码的测试结果可以看出:
with语句先运行,with之后对象的__enter__()方法
然后运行with空间的代码
1.1. 当with空间代码出错后,会直接运行__exit__()方法,然后抛出异常
1.2 当with空间代码没有错误时,程序按顺序__enter()__>> 逻辑语句>>exit()>>之后的代码继续运行
来源:https://www.cnblogs.com/LexiCalibur/p/13215603.html


猜你喜欢
- 虚拟环境管理创建虚拟环境#默认路径下创建虚拟环境conda create -n pythonVirtual python=x.x # -n:
- Dreamweaver一直是不少网友钟情的网页设计工具,除了它强大的动态效果制作能力外,方便简洁的操作界面更是独具特色,下面我们将以最新版本
- 语法1.普通[expression for target in iterable]2.带条件[expression for target i
- 如下所示:df = pd.DataFrame({'key': ['b', 'b', '
- 1.忍受 * 第一种解决办法,很简单,无他,不管他,没有读到也没事。这时业务不需要任何改造,你好,我好,她也好~如果业务对于数据一致性要求不高
- 1. # 可以使用LaTeX表示数学公式# 可以使用LaTeX表示数学公式from IPython.display import Latex
- 使方法一、用IP138数据库查询域名或IP地址对应的地理位置。#-*- coding:gbk -*-import urllib2import
- 1.不要放过任何一个看上去很简单的小编程问题——他们往往并不那么简单,或者可以引伸出很多知识点;2.会用asp,并不说明你会asp;3.看a
- 索引类型聚簇索引: 叶子节点存储的是行记录,每个表必须要有至少一个聚簇索引。使用聚簇索引查询会很快,因为可以直接定位到行记录普通索引:二级索
- 1、Python的数组可分为三种类型:(1) list 普通的链表,初始化后可以通过特定方法动态增加元素。定义方式:arr = [元素](2
- 一、创建一个项目如果这是你第一次使用Django,那么你必须进行一些初始设置。也就是通过自动生成代码来建立一个Django项目--一个Dja
- 目前SQL INJECTION的攻击测试愈演愈烈,很多大型的网站和论坛都相继被注入。这些网站一般使用的多为SQL SERVER数据库,正因为
- 描述int函数可以将一个指定进制的数字型字符串或者十进制数字转化为整形。语法int(object, base)名称说明备注object一个数
- 代码如下:Class Vector Private vector_datas() Private&n
- 在介绍之前,首先一个概念明确一个共识:没有攻不破的网站,只有值不值得。这意思是说,我们可以尽可能的提高自己网站的安全,但并没有绝对的安全,当
- 本文实例为大家分享了opencv矿石图片检测矿石数量的具体代码,供大家参考,具体内容如下原始矿石图片此类图片是高躁图,二值化后图像如下采用膨
- 这篇文章主要介绍了Python globals()和locals()对比详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的
- 前言上回在 用 Go 写一个轻量级的 ssh 批量操作工具 里提及过,我们做 Golang 并发的时候要对并发进行限制,对 goroutin
- run() 方法并不启动一个新线程,就是在主线程中调用了一个普通函数而已。start() 方法是启动一个子线程,线程名就是自己定义的name
- 1.连接测试连接是否成功:import redisr = redis.Redis(host='192.168.136.102'