python编程进阶之异常处理用法实例分析

1. 异常处理的概念

在编程中,可能会遇到许多无法预料的情况和错误。这时候,为了程序的健壮性和容错能力,我们需要使用异常处理的机制来应对这些错误。异常处理能够捕获并处理程序中的异常情况,从而使程序能够继续执行下去。

2. 异常处理的语法

2.1 try-except语句

try-except语句是最基本的异常处理语句,其语法形式如下:

try:

# 可能会引发异常的代码

except ExceptionType1:

# 异常类型为 ExceptionType1 时的处理

except ExceptionType2:

# 异常类型为 ExceptionType2 时的处理

...

except ExceptionTypeN:

# 异常类型为 ExceptionTypeN 时的处理

else:

# 没有发生异常时的处理

finally:

# 无论是否发生异常都要执行的代码

上述代码中,try代码块中的代码可能会出现异常,如果出现异常则会跳转到相应的except代码块进行处理。如果没有出现异常,则会执行else代码块中的内容,最后无论是否出现异常都会执行finally代码块中的内容。

2.2 raise语句

raise语句用于主动抛出异常,其语法形式如下:

raise Exception(args)

其中,Exception为异常类,args为异常的参数信息。raise语句会在当前位置抛出一个指定的异常,并停止当前操作。

3. 异常处理的实例分析

下面通过几个实例来介绍异常处理的用法和注意点。

3.1 实例一:文件读写异常处理

文件读写是常见的操作,但是在读写的过程中可能会出现各种异常,例如文件不存在、权限不足等。下面我们通过一个实例来介绍如何进行文件读写异常处理。

假设我们有一个文件test.txt,其中存放着一些数据。现在我们需要读取这个文件中的数据,并将其转换为整数类型。如果文件不存在或者文件中的数据无法转换为整数,则需要抛出相应的异常。

filename = 'test.txt'

try:

with open(filename, 'r') as f:

data = f.read()

data = int(data)

except FileNotFoundError:

print("文件不存在!")

# 路径错误或文件不存在

except ValueError:

print("文件数据无法转换为整数!")

# 文件内容不为数字(包括空文件)

else:

print("文件内容:%d" % data)

# 文件读取成功

finally:

print("文件读取操作结束!")

# 无论是否出现异常都执行此条语句

我们首先定义了一个变量filename来表示要读取的文件名,然后利用with关键字打开文件,进行文件读取操作。如果出现FileNotFoundError(文件不存在)或者ValueError(文件数据无法转换为整数)异常,则会跳转到相应的except代码块中进行处理。如果没有出现异常,则会执行文件读取成功的else代码块中的内容。最后无论是否出现异常都会执行finally代码块中的内容,输出文件读取操作结束的提示。

3.2 实例二:自定义异常

有时候,在处理异常的时候,我们需要创建自定义异常并抛出。自定义异常通常会继承自Python内置的Exception类,当然也可以自定义异常类的继承关系。

下面我们通过一个实例来介绍如何创建自定义异常和抛出异常。假设我们正在编写一个名为GuessNumber的猜数字游戏程序。如果玩家输入的数字超过了指定的范围(1~100),则需要抛出一个自定义的异常。

class OutOfRangeError(Exception):

"""数字超出范围的异常"""

def __init__(self, message):

self.message = message

def __str__(self):

return self.message

def guess_number(n):

if n < 1 or n > 100:

raise OutOfRangeError("输入的数字超出范围!")

else:

print("您猜的数字是%d" % n)

try:

guess_number(120)

except OutOfRangeError as e:

print(e)

else:

print("猜数字游戏结束!")

在上面的代码中,我们首先定义了一个异常类OutOfRangeError,继承自Python内置的Exception类。在构造方法__init__()中,我们定义了一个参数message,用于表示错误信息。在__str__()方法中,我们重写了对象的字符串表示,使得调用print()函数时能够输出错误信息。

接着定义了一个名为guess_number()的函数,用于检查输入的数字是否超出了指定的范围。如果超出了范围,则会主动抛出OutOfRangeError异常,并将错误信息传递给异常对象。

在主程序中,我们调用guess_number()函数,并使用try-except语句来处理异常。如果出现了自定义的OutOfRangeError异常,则会跳转到相应的except代码块中,输出错误信息。如果没有出现异常,则会执行else代码块中的内容,输出猜数字游戏结束的提示。

4. 总结

本文主要介绍了Python中异常处理的语法和用法,并通过几个实例来演示异常处理的具体应用。异常处理是保障程序健壮性和容错能力的重要机制,程序员在编写代码时需要注意异常处理的细节和注意事项,从而保证程序的稳定运行。

后端开发标签