Python中with - as用法
最常见到的用到with as的地方,比如打开文件的时候:
1 | with open("1.txt") as file: |
为什么要用with as,可以理解为是简化版的 try except语句,可以处理异常。
为什么要用with as
比如,上面的代码,不用with as 写法,一般这样写:
1 | file = open("1.txt") |
这样就会有个问题:当”1.txt”文件不存在的时候,就会报异常,就需要处理异常,或者先判断文件是否存在。你就可能需要这样写:
1 | try: |
而用with as就不需要这么麻烦了,能自动处理异常。
with as语句结构如下:
1 | with expression as [variable]: |
with 工作原理
with所求值的对象必须有一个enter()方法,一个exit()方法。
- 1.紧跟with后面的语句被求值后,返回对象的
__enter__()
方法被调用,这个方法的返回值将被赋值给as后面的变量; - 2.当with后面的代码块全部被执行完之后,将调用前面返回对象的
__exit__()
方法。所以也不用close()了。
比如下面的代码:
1 | class Sample: |
代码输出结果如下:
1 | In __enter__() |
代码执行过程:
- 1.with as语句中sample=get_sample(),调用get_sample()方法;
- 2.返回一个Sample()对象;
- 3.调用Sample()对象的
__enter__()
方法,输出In __enter__()
,并return “Foo”; - 4.执行with下面代码块的语句,
print("sample:", sample)
; - 5.with执行完后,调用Sample()对象的
__exit__()
方法,输出In __exit__()
。
exit()方法中有3个参数:exc_type
,exc_value
,exc_trace
,是在异常处理中用的。
exc_type
:错误的类型exc_value
:错误类型对应的值exc_trace
:代码中错误发生的位置
可以在exit()方法中print打印出来。
- 本文标题:Python中with - as用法
- 本文作者:HDUZN
- 创建时间:2022-05-20 21:55:14
- 本文链接:http://hduzn.cn/2022/05/20/Python中with-as用法/
- 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
评论