• Day07


    1.异常

    (1).简介

    ​ 程序在运行过程中不可避免的会出现一些错误,比如使用了没有赋值过的变量、使用了不存在的索引、除0等。这些错误在程序中称其为异常,在程序中出现异常会导致程序立即终止,异常以后的代码全部都不会执行。

    (2).处理异常

    ​ 程序运行时出现异常,目的不是让程序直接终止,而是希望在出现异常时可以编写代码对异常进行处理。

    try:
        代码块(可能出现错误的语句)
    except:
        代码块(出现错误以后的处理方式)
    else:
        代码块(没出错时要执行的语句)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    ​ 可以将可能出错的代码放到try子句中,这样如果代码没有错误则会正常执行,如果出现错误则会执行expect子句中的代码,这样就可以通过代码来处理异常,避免因为一个异常导致整个程序的终止。

    (3).异常的传播(抛出异常)

    ​ 当在函数中出现异常时,如果在函数中对异常进行了处理,则异常不会再继续传播,如果在函数中没有对异常进行处理,则异常会继续向函数调用处传播,如果函数调用处处理了异常,则不再传播,如果没有处理则继续向调用处传播,直到传递到全局作用域(主模块)如果依然没有处理,则程序终止并显示异常信息。

    ​ 当程序运行过程中出现异常以后,所有的异常信息会被保存到一个专门的异常对象中,而异常传播时,实际上就是异常对象抛给了调用处。

    ​ raise用于向外部抛出异常,后边可以跟一个异常类或异常类的实例,其目的是告诉调用者这里调用时出现问题。

    def add(a,b):
        if a < 0 or b < 0:
            raise Exception('两个参数中不能有负数')
        r = a + b
        return r
    print(add(-1,2))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    (4).异常对象

    ​	1.如果在except后不跟任何内容,则此时它会捕获到所有的异常,如果在except后跟一个异常类型,则此时它只会捕获该类型的异常。
    
    ​	2.Exception是所有异常类的父类,所以如果except后跟的是Exception,则会捕获到所有的异常。
    
    ​	3.可以在异常类后跟着一个as xx,此时xx就是异常对象。
    
    ​	4.finally子句无论是否出现异常,该子句都会执行。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    2.文件

    (1).打开文件

    ​ 使用open()函数来打开一个文件,可以将文件分成两种类型,一种是纯文本文件,一种是二进制文件,默认打开的是纯文本文件(编码为None),所以在处理文本文件时必须要指定文件的编码。

    ​	1.file:表示要打开文件的名字(路径),可以使用..来返回一级目录,如果目标文件距离当前文件较远,此时可以使用绝对路径。
    
    ​	2.返回值:返回一个代表当前打开文件的对象。
    
    • 1
    • 2
    • 3
    open('demo.txt')
    
    • 1

    (2).关闭文件

    ​ 当我们获取到文件对象以后,所有对文件的操作都应该通过对象来进行。

    ​ read()方法用来读取文件中的内容,它会将内容全部保存为一个字符串返回。

    ​ 调用close()方法关闭文件。

    file_obj.close() # 直接关闭文件
    
    '''
    在with语句中可以直接使用file_obj来做文件操作,此时这个文件只能在with语句中使用,一旦with语句结束则文件会自动关闭
    '''
    file_name = 'hello'
    
    try:
        with open(file_name) as file_obj:
            print(file_obj.read())
    except FileNotFoundError:
        print(f'{file_name}文件不存在')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    (3).读取文件

    1>.读取小文件
    file_name = 'demo.txt'
    
    try:
        with open(file_name,encoding = 'UTF-8') as file_obj:
            content = file_obj.read()
            print(content)
    except FileNotFoundError:
        print(f'{file_name}文件不存在')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    2>.读取大文件

    ​ 如果直接调用read(),它会将文本文件的所有内容全部都读取出来,如果要读取的文件较大的话,会一次性将文件的内容加载到内存中,容易导致内存泄露。

    ​ read()可以接收一个size作为参数,该参数用来指定要读取的字符数量,默认值为-1,会读取文件中的所有字符。可以为size指定一个值,这样read()会读取指定数量的字符,每一次读取都是从上次读取到的位置开始读取的,如果字符的数量小于size,则会读取所有字符,如果已经读取到文件的最后,则会返回‘空串’。

    file_name = 'demo.txt'
    
    try:
        with open(file_name,encoding = 'UTF-8') as file_obj:
            # 定义一个变量,来指定每次读取的大小
            step = 50
            # 创建一个循环来读取文件内容
            while True:
                # 读取step大小的内容
                content = file_obj.read(step)
                # 检查是否读取到了内容
                if not content:
                    # 内容读取完毕
                    break
                print(content,end='')
    except FileNotFoundError:
        print(f'{file_name}文件不存在')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    3>.readline

    ​ 该方法可以用来读取文件中的一行数据。

    file_name = 'demo.txt'
    
    try:
        with open(file_name,encoding = 'UTF-8') as file_obj:
            # 定义一个变量,来指定每次读取的大小
            step = 50
            # 创建一个循环来读取文件内容
            while True:
                # 读取step大小的内容
                content = file_obj.readline(step)
                # 检查是否读取到了内容
                if not content:
                    # 内容读取完毕
                    break
                print(content,end='')
    except FileNotFoundError:
        print(f'{file_name}文件不存在')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    4>.readlines

    ​ 该方法用于一行一行读取内容,会一次性将读取到的内容封装到一个列表中返回。

    file_name = 'demo.txt'
    
    try:
        with open(file_name,encoding = 'UTF-8') as file_obj:
            # 定义一个变量,来指定每次读取的大小
            step = 50
            # 创建一个循环来读取文件内容
            while True:
                # 读取step大小的内容
                content = file_obj.readlines(step)
                # 检查是否读取到了内容
                if not content:
                    # 内容读取完毕
                    break
                print(content,end='')
    except FileNotFoundError:
        print(f'{file_name}文件不存在')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    (4).写入文件

    ​ 使用open()打开文件时必须要指定打开文件所要做的操作(读、写、追加),如果不指定操作类型,则默认是读取文件,而读取文件时不能向文件中写入。

    ​ write()来向文件中写入内容,如果操作的是一个文本文件的话,则write()需要传递一个字符串作为参数,该方法可以分多次向文件中写入内容,写入完成后,该方法会返回写入的字符个数。

    ​	1.w表示可写,使用w来写入文件时,如果文件不存在会创建文件,如果文件存在会截断文件(删除原来文件中的所有内容)。
    
    ​	2.a表示追加内容,如果文件不存在会创建文件,如果文件存在则会想文件中追加内容。
    
    ​	3.x表示新建文件,如果文件不存在则创建,如果存在则报错。
    
    ​	4.+为操作符增加功能,比如r+(既可读又可写,文件不存在会报错)、w+、a+。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    file_name = 'demo.txt'
    
    with open(file_name,'w',encoding = 'UTF-8') as file_obj:	# w会截断文件
            file_obj.write('aaa\n')
            file_obj.write('bbb\n')
            file_obj.write('ccc\n')
            file_obj.write(str(123) + '\n')
    
    with open(file_name,'a',encoding = 'UTF-8') as file_obj:	# a会追加内容
            file_obj.write('aaa\n')
            file_obj.write('bbb\n')
            file_obj.write('ccc\n')
            file_obj.write(str(123) + '\n')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    (5).二进制文件

    ​ b表示读取二进制文件,size是以字节为单位的。

    with open(file_name,'rb') as file_obj:
            print(file_obj.read())
    
    • 1
    • 2

    (6).tell()和seek()

    ​	1.tell()方法用来查看当前读取的位置。
    
    ​	2.seek()方法可以修改当前读取的位置。它需要两个参数,第一个是要切换到的位置,第二个是计算方式:可选值为0(从头计算,默认值),1(从当前位置计算),2(从最后位置开始计算)。
    
    • 1
    • 2
    • 3

    (7).其他操作

    ​	1.os.listdir():需要一个路径作为参数,会获取到该路径下的目录结构,默认路径为.即当前目录,会返回一个列表。
    
    ​	2.os.getcwd():获取当前所在的目录。
    
    ​	3.os.chdir():切换当前所在的目录,作用相当于cd。
    
    ​	4.os.mkdir("aaa"):在当前目录下创建一个名字为aaa的目录。
    
    ​	5.os.rmdir("aaa"):删除指定目录。
    
    ​	6.os.remove('aaa.txt'):删除指定文件。
    
    ​	7.os.rename('旧名字','新名字'):文件重命名。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
  • 相关阅读:
    【JAVAEE框架】Spring 项目构建流程
    Spring Boot + Canal 实现数据库实时监控
    AS巧用IDEA注释,提高协作/开发效率
    [附源码]计算机毕业设计springboot疫情网课管理系统
    Anaconda成功安装之后没有在菜单列和桌面显示图标
    基于SSM的“大学生艺术节”管理系统的设计与实现
    C# 编写小巧快速的 Windows 动态桌面软件
    微信小程序-生成canvas图片并保存到手机相册
    Ant vue中表单验证(动态校验、部分校验)
    事务的七种传播行为
  • 原文地址:https://blog.csdn.net/qq_43069447/article/details/127693553