首页 > 编程语言 >python with语句

python with语句

时间:2023-10-14 15:57:15浏览次数:32  
标签:语句 __ 管理器 python file 上下文 异常

python with语句

  • with语句的作用

    with语句是python引入的一种与异常处理相关的功能,可以看作是try...finally语句的简化.
    with语句常用于对资源进行访问的场景,可以确保在对资源操作过程中不管是否发生异常,都能自动地正常释放资源.
  • with语句的基本语法

    with expression [as variable]:
       with-block

    """
    expression:返回一个支持上下文管理协议的对象,返回的对象可以在with-block开始前执行初始化程序,在with-block完成后执行终止化程序代码,不论with-block中是否发生异常

    variable:variable一般来说被赋值的是expression返回的对象
    """
  • 上下文管理器

    """
    理解with语句,先理解python的上下文管理器.
    作为上下文管理器,必须实现两个方法:

    __enter__():上文方法,负责进入运行时上下文的准备操作,返回的值可以是上下文管理器对象,也可以是与运行时上下文相关的其他对象,如果with语句有as,会把其返回的值赋值给as后的变量上.

    __exit__():下文方法,负责退出运行时上下文的清理操作,返回一个布尔值,这个布尔值标明如果with-block的退出是由异常引发的,该异常是否需要被忽略(返回值为False:这个异常将被重新引发一次;返回值为True:这个异常就会被忽略,继续执行后面的代码)

    这两个方法就是上下文管理器协议,实现了这两个方法的对象就是上下文管理器.
    """
  • 自定义上下文管理器

    # python的一些内置工具实现了上下文管理协议,如open(file),threading.Lock,threading.RLock等.

    # 还可以自定义上下文管理器
    # 自定义上下文管理器类
    class File(object):
       # 初始化方法
       def __init__(self, file_name, file_mode):
           # 定义变量保存文件名称和文件的打开模式
           self.file_name = file_name
           self.file_mode = file_mode

       # 上文方法:负责进入语句块的准备操作,返回操作对象资源(如文件对象,数据库连接对象),也可以是其他相关对象
       def __enter__(self):
           # 返回文件资源
           self.file = open(self.file_name, self.file_mode)
           return self.file


       """
      下文方法:负责离开语句块的清理操作,释放资源,如关闭文件,关闭数据库连接对象
      exc_type:异常类型,如果执行无异常,值为None
      exc_val:异常值,如果执行无异常,值为None
      exc_tb:traecback信息,如果执行无异常,值为None
      """
       def __exit__(self, exc_type, exc_val, exc_tb):
           print("退出")
           # 释放资源
           self.file.close()


    """
    with语句结合上下文管理器使用
    with语句执行流程:
      1. 执行File("text1.txt", "r")语句,获取上下文管理器
      2. 加载上下文管理器的__exit__()方法等后续调用
      3. 调用上下文管理器的__enter__()方法
      4. 如果有as关键字,就将__enter__()方法的返回值赋值给as后边的变量
      5. 执行子代码块with-block
      6. 不管执行子代码块with-block时是否发生异常,都自动执行上下文管理器的__exit__()方法,执行清理操作
          6.1 如果执行过程中没有发生异常,则以None为参数调用__exit__(None, None, None)
          6.2 如果执行过程中出现异常,则使用sys.exc_info得到的异常信息为参数调用__exit__(exc_type, exc_value, exc_traceback)
      7. 出现异常时:
          7.1 如果__exit__(type, value, traceback) == False:重新抛出异常,让with之外的语句来处理异常
          7.2 如果__exit__(type, value, traceback) == True:忽略异常,不再对异常进行处理
    """
    with File("text1.txt", "r") as f:
       # file_content = f.read()
       # print(file_content)
       # 因为文件打开方式是只读,写入肯定会发生异常
       f.write("aaa")

标签:语句,__,管理器,python,file,上下文,异常
From: https://www.cnblogs.com/CJTARRR/p/17764258.html

相关文章

  • ORACLE:集群oracle查看session的语句
    1.查看session可以把status改为ACTIVE和INACTIVEv$session和gv$session只在RAC中区别明显,有g是全局的,rac的两个数据库中的内容,没有是但实例的数据库的,内容不全rac么?  gv$开头视图是rac全局的,v$开头是本节点的gv$session比v$session多一个字段而已: INST_ID selectmachi......
  • pycharm连接远程服务器,代码成功运行,但一些基本python属性和函数会报红线(例如print)解决
    状况:pycharm连接远程服务器,代码成功运行,但一些常见python属性和方法报红线,例如print。当你在程序中输入print这种基本方法时,pycharm是不会有输入提示的,输入后也会报红线解决方法:将远程服务器中的环境变量添加至pycharm中查出服务器中环境变量:在xshell中输入vim~/.bashrc执......
  • 实验四报告: 熟悉Python字典、集合、字符串的使用
    实验目标本实验的主要目标是熟悉Python中字典、集合、字符串的创建和操作,包括字典的创建、访问、修改和合并,集合的创建、访问以及各种集合运算,以及字符串的创建、格式化和常用操作。实验要求通过编写Python代码,验证以下要求:熟悉Python字典的创建、访问、修改、合并。熟悉Pyt......
  • python多线程with方式加锁
    python多线程with方式加锁"""pythonTreading中的Lock模块提供了加锁和释放锁的方法,分别是acquire()和release().这两个方法可以搭配python的with语句使用."""#示例fromthreadingimportLock​temp_lock=Lock()​withtemp_lock: print(temp_lock) #输出是<locked......
  • Python中图像相似性度量方法汇总
    1.引言在当前到处充满着图像的世界里,测量和量化图像之间的相似性已经成为一项关键的任务。无论是图像检索、内容推荐还是视觉搜索,图像相似性方法在现代计算机视觉的应用中都发挥着关键的作用。幸运的是,Python提供了大量的工具和库,使开发人员和研究人员都可以快速探索和实现这些功......
  • PythonNotes_Basic1
    基本数据类型标准数据类型常见数据类型:Number(数字)String(字符串)bool(布尔类型)List(列表)Tuple(元组)Set(集合)Dictionary(字典)六个标准数据类型中:不可变数据(3个):Number(数字)、String(字符串)、Tuple(元组);可变数据(3个):List(列表)、Set(集合)、Dict......
  • PythonNote
    Python的编程模式分为两种:交互式,脚本式。(1)交互式:交互式编程,需要我们打开cmd窗口(命令提示符窗口),在窗口中键入python,回车,这样就进入了交互式编程。此时我们直接输入python语句,就可以得到运行的结果:(2)脚本式:是我们先把python语句写好,保存在后缀为.py的文件里,然后从外......
  • PythonNotes_Basic
    Python3基础目录1基本数据类型2数据类型转换3算术运算符4条件控制5条件控制6条件控制......
  • 10-14|Python处理脏话
    处理脏话通常是一个复杂的任务,涉及到文本处理、正则表达式、自然语言处理等领域。以下是一种简单的方法,但需要注意,任何自动化的系统都不可能完美,可能会有误判或遗漏。1.**脏话词汇表**:首先,你可以创建一个脏话词汇表,这是最简单也最直接的方法。```pythonbad_words=["badword1......
  • Anaconda虚拟环境配置Python库与Spyder编译器
      本文介绍在Anaconda中,为Python的虚拟环境安装第三方库与Spyder等配套软件的方法。  在文章创建Anaconda虚拟Python环境的方法中,我们介绍了在Anaconda环境下,创建、使用与删除Python虚拟环境的方法;而创建虚拟环境后,就需要在对应的环境内配置各类库与软件,本文就对这些操作加以......