Day07

本文介绍了Python中的异常处理机制及文件操作方法,包括如何使用try-except语句处理异常、不同方式读取文件内容以及向文件写入数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.异常

(1).简介

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

(2).处理异常

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

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

​ 可以将可能出错的代码放到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))

(4).异常对象

​	1.如果在except后不跟任何内容,则此时它会捕获到所有的异常,如果在except后跟一个异常类型,则此时它只会捕获该类型的异常。

​	2.Exception是所有异常类的父类,所以如果except后跟的是Exception,则会捕获到所有的异常。

​	3.可以在异常类后跟着一个as xx,此时xx就是异常对象。

​	4.finally子句无论是否出现异常,该子句都会执行。

2.文件

(1).打开文件

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

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

​	2.返回值:返回一个代表当前打开文件的对象。
open('demo.txt')

(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}文件不存在')

(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}文件不存在')
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}文件不存在')
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}文件不存在')
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}文件不存在')

(4).写入文件

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

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

​	1.w表示可写,使用w来写入文件时,如果文件不存在会创建文件,如果文件存在会截断文件(删除原来文件中的所有内容)。

​	2.a表示追加内容,如果文件不存在会创建文件,如果文件存在则会想文件中追加内容。

​	3.x表示新建文件,如果文件不存在则创建,如果存在则报错。

​	4.+为操作符增加功能,比如r+(既可读又可写,文件不存在会报错)、w+、a+。
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')

(5).二进制文件

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

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

(6).tell()和seek()

​	1.tell()方法用来查看当前读取的位置。

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

(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
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值