python with 语句妙用

class aa():
    def bb(self):
        print("hhhh")
        return "hello world"

    def __enter__(self): # 必须有__enter__
        print("enter")
        return self

    def cc(self):
        print("www")

    def __exit__(self, exc_type, exc_val, exc_tb): # 必须有结束__exit__
        print("exit")

def ll():
    with aa() as a:
        return a.bb()

res = ll()
print(res)

结果:

enter
hhhh
exit
hello world

原理:自定义上下文管理器

开发人员可以自定义支持上下文管理协议的类。自定义的上下文管理器要实现上下文管理协议所需要的 __enter__() 和 __exit__() 两个方法:

    context_manager.__enter__() :进入上下文管理器的运行时上下文,在语句体执行前调用。with 语句将该方法的返回值赋值给 as 子句中的 target,如果指定了 as 子句的话
    context_manager.__exit__(exc_type, exc_value, exc_traceback) :退出与上下文管理器相关的运行时上下文,返回一个布尔值表示是否对发生的异常进行处理。参数表示引起退出操作的异常,如果退出时没有发生异常,则3个参数都为None。如果发生异常,返回

    True 表示不处理异常,否则会在退出该方法后重新抛出异常以由 with 语句之外的代码逻辑进行处理。如果该方法内部产生异常,则会取代由 statement-body 中语句产生的异常。要处理异常时,不要显示重新抛出异常,即不能重新抛出通过参数传递进来的异常,只需要将返回值设置为 False 就可以了。之后,上下文管理代码会检测是否 __exit__() 失败来处理异常 
时间: 2024-11-07 15:38:07

python with 语句妙用的相关文章

Python条件语句

1) if 语句 #格式if (条件):    语句块 2) if else 语句 #格式if (条件):    语句块1else:    语句块2 3) if-elif-else 语句 #格式if (条件1):    语句块1elif (条件2):    语句块2--else:    语句块n 4) if嵌套 #格式if (条件1):    if (条件2):        语句块1    elif (条件2):        语句块2--elif (条件n):    语句块n--else: 

Python循环语句

Python语言中的循环结构包含两种语句,分别是while语句和for语句. 1. while语句 while(表达式): -- else: -- 执行过程:当循环表达式为True时,依次执行while中的语句.直到循环表达式的值为False时,才执行else语句或退出循环.其中else子句可以省略,表达式两端的等号也可以省略. 2. for语句 for循环用于遍历一个集合,依次访问集合中的每个项目.格式如下: for 变量 in 集合: -- else: -- 执行过程:每次循环从集合中取出一

Python 条件语句day05

Python 条件语句 Python条件语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块. Python 编程中 if 语句用于控制程序的执行,基本形式为: if 判断条件:     执行语句-- else:     执行语句-- 其中"判断条件"成立时(非零),则执行后面的语句,而执行内容可以多行,以缩进来区分表示同一范围. else 为可选语句,当需要在条件不成立时执行内容则可以执行相关语句,具体例子如下: # coding=utf8 # 例1:if 

Python 条件语句

Python条件语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块. Python程序语言指定任何非0和非空(null)值为true,0 或者 null为false. Python 编程中 if 语句用于控制程序的执行,基本形式为: if 判断条件: 执行语句…… else: 执行语句…… 其中"判断条件"成立时(非零),则执行后面的语句,而执行内容可以多行,以缩进来区分表示同一范围. else 为可选语句,当需要在条件不成立时执行内容则可以执行相关语句,具

Python:eval的妙用和滥用

eval()函数十分强大,官方demo解释为:将字符串str当成有效的表达式来求值并返回计算结果. so,结合math当成一个计算器很好用. 其他用法,可以把list,tuple,dict和string相互转化.见下例子: a = "[[1,2], [3,4], [5,6], [7,8], [9,0]]" b = eval(a) b Out[3]: [[1, 2], [3, 4], [5, 6], [7, 8], [9, 0]] type(b) Out[4]: list a = &qu

python笔记--语句

python语句特点: 1.条件后面都以分号结尾 2.缩进问题:缩进是python表示语句块的唯一方法,一个语句快中的所有语句必须使用相同的缩进.关于缩进风格,标准python风格是每个缩进级别使用4个空格,最好不要使用Tab制表符,因为不同的编辑器处理制表符的方式不同. 条件判断 1.单分支if语句 if <条件判断>:      <执行> 如果if语句判断是True,就把缩进的语句执行了,否则,什么也不做.也可以给if添加一个else语句,意思是,如果if判断是False,不要

Python break 语句

Python break 语句 Python break语句,就像在C语言中,打破了最小封闭for或while循环. break语句用来终止循环语句,即循环条件没有False条件或者序列还没被完全递归完,也会停止执行循环语句. break语句用在while和for循环中. 如果您使用嵌套循环,break语句将停止执行最深层的循环,并开始执行下一行代码. Python语言 break 语句语法: break 流程图: 实例: #!/usr/bin/python for letter in 'Pyt

Python continue 语句

Python continue 语句 Python continue 语句跳出本次循环,而break跳出整个循环. continue 语句用来告诉Python跳过当前循环的剩余语句,然后继续进行下一轮循环. continue语句用在while和for循环中. Python 语言 continue 语句语法格式如下: continue 流程图: 实例: #!/usr/bin/python # -*- coding: UTF-8 -*- for letter in 'Python': # 第一个实例

python 经典语句日志分析

#!/usr/bin/python import re def buffer_line(): buf = open("/etc/sae/buffer_1").read() if not buf: return 0 else: return int(re.findall("^\d*", buf)[0]) def set_last_pos(pos): open("/etc/sae/buffer_1", "w").write(str