python中with用法讲解

 更新时间:2020年02月07日 14:32:07   作者:木&子  
在本篇文章里小编给大家整理的是关于python中with用法讲解内容,有需要的朋友们可以参考下。

我们都知道打开文件有两种方法:

  • f = open()
  • with open() as f:

这两种方法的区别就是第一种方法需要我们自己关闭文件;f.close(),而第二种方法不需要我们自己关闭文件,无论是否出现异常,with都会自动帮助我们关闭文件,这是为什么呢?

我们先自定义一个类,用with来打开它:

class Foo():
  def __enter__(self):
    print("enter called")
  def __exit__(self, exc_type, exc_val, exc_tb):
    print("exit called")
    print("exc_type :%s"%exc_type)
    print("exc_val :%s"%exc_val)
    print("exc_tb :%s"%exc_tb)


with Foo() as foo:
  print("hello python")
  a = 1/0
  print("hello end")

执行结果:

enter called
Traceback (most recent call last):
hello python
exit called
exc_type :<class 'ZeroDivisionError'>
exc_val :division by zero
 File "F:/workspaces/python_workspaces/flask_study/with.py", line 25, in <module>
  a = 1/0
exc_tb :<traceback object at 0x0000023C4EDBB9C8>
ZeroDivisionError: division by zero

Process finished with exit code 1

我们看到,执行结果的输入顺序,分析如下:

当我们with Foo() as foo:时,此时会执行__enter__方法,然后进入执行体,也就是:

print("hello python")
a = 1/0
print("hello end")

语句,但是在a=1/0出现了异常,with将会中止,此时就执行__exit__方法,就算不出现异常,当执行体被执行完毕之后,__exit__方法仍然被执行一次。

我们回到with open("file")as f: 不用关闭文件的原因就是在__exit__方法中,存在关闭文件的操作,所以不用我们手工关闭文件,with已将为我们做好了这个操作,这就可以理解了。

以上就是小编整理的相关内容,如果大家有任何补充可以联系脚本之家小编。

相关文章

  • python中语法糖的妙用分享

    python中语法糖的妙用分享

    在Python中,语法糖是指一些为了增加代码的可读性、易用性和简洁性而添加的特性,本文为大家整理了一些python中常见语法糖的使用,需要的小伙伴可以了解下
    2023-11-11
  • 使用Python微信库itchat获得好友和群组已撤回的消息

    使用Python微信库itchat获得好友和群组已撤回的消息

    这篇文章主要介绍了使用Python微信库itchat获得好友和群组已撤回的消息,需要的朋友可以参考下
    2018-06-06
  • 使用Python实现简单的人脸识别功能(附源码)

    使用Python实现简单的人脸识别功能(附源码)

    Python中实现人脸识别功能有多种方法,依赖于python胶水语言的特性,我们通过调用包可以快速准确的达成这一目的,本文给大家分享使用Python实现简单的人脸识别功能的操作步骤,感兴趣的朋友一起看看吧
    2021-12-12
  • Flask框架debug与配置项的开启与设置详解

    Flask框架debug与配置项的开启与设置详解

    这篇文章主要介绍了Flask框架debug与配置项的开启与设置,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-09-09
  • 详解Python中的元组与逻辑运算符

    详解Python中的元组与逻辑运算符

    这篇文章主要介绍了Python中的元组与逻辑运算符的用法,是Python入门学习中的基础知识,需要的朋友可以参考下
    2015-10-10
  • Python实现简单的索引排序与搜索功能

    Python实现简单的索引排序与搜索功能

    这篇文章主要介绍了Python实现简单的索引排序与搜索功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04
  • python实现从ftp上下载文件的实例方法

    python实现从ftp上下载文件的实例方法

    在本篇文章里小编给大家整理了关于python实现从ftp上下载文件的实例方法,需要的朋友们可以参考下。
    2020-07-07
  • python request要求接口参数必须是json数据的处理方式

    python request要求接口参数必须是json数据的处理方式

    这篇文章主要介绍了python request要求接口参数必须是json数据的处理方式,Reqeusts支持以form表单形式发送post请求,只需要将请求的参数构造成一个字典,然后传给requests.post()的data参数即可,本文通过实例代码给大家介绍的非常详细,需要的朋友参考下吧
    2022-08-08
  • kaggle+mnist实现手写字体识别

    kaggle+mnist实现手写字体识别

    这篇文章主要为大家详细介绍了kaggle+mnist实现手写字体识别,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-07-07
  • Python编程实现tail-n查看日志文件的方法

    Python编程实现tail-n查看日志文件的方法

    这篇文章主要介绍了Python编程实现tail-n查看日志文件的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07

最新评论