5.1 文件的读写操作
在Python中,可以使用open函数来打开一个文件,并通过文件对象进行读写操作。open函数的语法如下:
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
其中,file参数表示要打开的文件名或文件路径,mode参数表示文件打开的模式,可以是以下之一:
- ‘r’:只读模式(默认值)
- ‘w’:只写模式,会覆盖已有的文件
- ‘x’:创建新文件并写入数据,如果文件已存在则会抛出FileExistsError异常
- ‘a’:追加模式,会将数据写入到文件末尾
- ‘b’:二进制模式
- ‘t’:文本模式(默认值)
- ‘+’:读写模式
例如,下面的代码打开一个名为test.txt的文件,以只读模式读取其中的内容:
with open('test.txt', 'r') as file:
content = file.read()
print(content)
在上面的代码中,with语句会在文件使用完毕后自动关闭文件,防止资源泄漏。read方法会读取整个文件的内容,并将其作为字符串返回。
如果要逐行读取文件的内容,可以使用readline方法。例如:
with open('test.txt', 'r') as file:
line = file.readline()
while line:
print(line.strip())
line = file.readline()
在上面的代码中,strip方法会去除每行末尾的换行符。
如果要将数据写入文件中,可以使用write方法。例如:
with open('test.txt', 'w') as file:
file.write('Hello, world!')
在上面的代码中,write方法会将字符串’Hello, world!'写入文件中。
如果要将多行数据写入文件中,可以使用writelines方法。例如:
with open('test.txt', 'w') as file:
lines = ['Hello, world!\n', 'How are you?\n']
file.writelines(lines)
在上面的代码中,writelines方法会将包含两个字符串的列表写入文件中。注意,每个字符串都必须以换行符结尾。
5.2 异常处理机制
在Python中,可以使用try-except语句来捕获并处理异常。try语句会尝试执行一段代码,如果在执行过程中发生了异常,就会抛出一个异常对象。except语句可以捕获这个异常对象,并进行相应的处理。
以下是一个简单的例子,演示了如何使用try-except语句处理异常:
try:
num1 = int(input('请输入一个整数:'))
num2 = int(input('请输入另一个整数:'))
result = num1 / num2
print(result)
except ValueError:
print('输入的不是整数!')
except ZeroDivisionError:
print('除数不能为0!')
except Exception as e:
print('发生了未知的错误:', e)
在上面的代码中,try语句尝试执行输入和计算操作,并在执行过程中可能抛出ValueError、ZeroDivisionError或其他异常。如果抛出了ValueError异常,就会执行第一个except语句块;如果抛出了ZeroDivisionError异常,就会执行第二个except语句块;如果抛出了其他异常,就会执行第三个except语句块。
当然,也可以不指定任何异常类型,这样except语句就会捕获所有异常。例如:
try:
# 执行一些可能会抛出异常的操作
except:
# 处理异常
在实际开发中,也可以通过raise语句抛出异常。例如:
def divide(num1, num2):
if num2 == 0:
raise ZeroDivisionError('除数不能为0!')
return num1 / num2
try:
result = divide(10, 0)
except ZeroDivisionError as e:
print(e)
在上面的代码中,当除数为0时,函数会抛出ZeroDivisionError异常,并在try语句中被捕获。
此外,Python还提供了finally语句和else语句,用于在try语句结束后执行一些清理工作或者处理没有发生异常时的情况。例如:
try:
# 执行一些操作
except:
# 处理异常
else:
# 没有发生异常时执行的代码
finally:
# 无论是否发生异常都要执行的代码
在上面的代码中,else语句块会在try语句执行完毕并且没有发生异常时执行;finally语句块会在try语句执行完毕后无论是否发生异常都要执行。