当我们在使用 Python 进行开发时,有些时候会遭遇奇怪的异常和报错信息,这些错误信息有些时候会让我们十分头疼,不知道从何解决。不过有一个叫做 try-except
的模块可以帮助我们应对这种情况。
什么是 try-except
?
try-except
是 Python 中的一个异常处理模块,它可以在 Python 脚本中捕获运行时的异常,从而防止程序崩溃。
基本语法如下:
try:
# 可能会出错的代码块
except:
# 出错后的处理代码块
当 try 块中的代码抛出异常时,Python 会提前终止当前代码块的执行,并执行 except 块中的代码。这样就可以在出错的时候处理异常,避免代码的崩溃。
下面来看两个具体的使用示例。
示例一
假如我们有一个函数,它用来计算两个数的商。但是在其中一个数为 0 的情况下,Python 会抛出一个 ZeroDivisionError 异常。
现在我们想要在这个出错的情况下,输出一个提示信息,告诉用户不能进行除以 0 的操作。代码如下:
def divide(num1, num2):
try:
result = num1 / num2
print(result)
except ZeroDivisionError:
print("Error: 除数不能为0")
# 测试
divide(4, 2) # 输出 2.0
divide(4, 0) # 输出 Error: 除数不能为0
在第一个测试中,代码块正常执行,计算并输出了两个数的商。但在执行第二个测试时,当第二个参数 num2 的值为 0 时,try 块中的代码就会抛出一个 ZeroDivisionError 异常。这时程序会立刻停止执行 result = num1 / num2
的代码,跳转到 except 块中,并输出我们指定的提示信息 “Error: 除数不能为0″。
示例二
假如我们从一份文件中读取了很多数据,每一行数据都是以逗号分隔的三个值,我们想要把这些数据分别存储到一个数组中。但是有些行可能因为格式问题导致数据无法正常存储。
现在我们要写一个函数,来读取这个文件中的数据并进行处理。在不能正常处理某些行时,就要进行异常处理,避免因为这些无法处理的行造成程序的崩溃。代码如下:
def read_data(file_name):
data = []
with open(file_name) as f:
for line in f:
try:
num1, num2, num3 = line.strip().split(',')
data.append([float(num1), float(num2), float(num3)])
except Exception as e:
print(f"Error: {e} occurs in line {line.strip()}")
return data
# 测试
data = read_data("data.txt")
print(data)
在函数中,我们首先打开了要读取的文件。然后对每一行进行循环遍历。在 try 块中,我们首先用 strip 方法去掉了行尾的空白符,然后使用 split 方法将这一行数据按照逗号进行分割。我们将分割得到的三个值分别转换为 float 型数据,最后将这三个值以列表的形式存储到了 data 中。
如果某一行无法被正常处理,就会抛出一个异常。我们捕获了这个异常,并在 except 块中输出了一个错误信息,告诉我们在哪个文件的哪一行发生了错误。
如何应用 try-except
处理任何异常?
还有一种情况如果你的Python报错不是ZeroDivisionError
,那么怎么办呢? 代码如下:
try:
code to avoid from raising an Exception.
except:
pass
在这种形式中,除了ZeroDivisionError
之外,也捕捉其他的所有异常。在 except 块中使用 pass 关键字会表示忽略这些异常,让代码继续执行。
以上是 try-except
模块的详细说明,希望本文可以对你有所帮助。