Python 3 异常处理 Exception Handling

高分请教一下,Python 3 异常处理 Exception Handling
最新回答
石榴菇凉

2024-10-12 07:25:39

在软件的开发过程中,异常处理是一个不可或缺的环节。几乎每位工程师都无法保证自己的程序不会遇到异常,因此,掌握正确的异常处理方法至关重要。

以一个名为Exception.py的文件为例,以下是运行结果:

Traceback (most recent call last): File "Exception.py", line 7, in if __name__ == '__main__': main() File "Exception.py", line 4, in main x = int('str') ValueError: invalid literal for int() with base 10: 'str'

其中,ValueError是抛出的异常名称,"invalid literal for int() with base 10: 'str'"是异常的具体信息。Traceback表示显示的是异常的触发代码和调用信息。

在这个例子中,Exception.py文件的第4行触发了ValueError异常,即x = int('str')。第7行调用了第4行的代码,即if __name__ == '__main__': main()。

Python中,我们可以使用try语句来捕获异常。以下是运行结果:

Caught a ValueError Exception

将可能触发异常的代码放入try中,并在except语句中添加可能出现的异常种类。如果try中的代码抛出异常,我们可以在except中对捕获的异常进行处理(例如,简单输出)。

当try中可能抛出的异常不止一种时,我们可以使用多个except语句来有针对性地捕获不同的异常。例如,在这个例子中,我们试图捕获ValueError、ZeroDivisionError和其他异常。

使用except XXXError可以有针对性地捕获异常,进而有针对性地对异常进行处理。例如,如果ValueError异常被触发,我们可以为x提供一个默认值或其他处理方式,使其在后续代码中有效;如果ZeroDivisionError异常被触发,我们可以干预y的值。

如果没有声明具体的异常类,只使用了except,那么该except会尝试捕获其他一切触发的异常。通常建议在能够捕获具体异常时,使用具体异常。

Else语句用于处理当没有异常发生时需要执行的语句,而finally用于不管有没有异常抛出,都要执行的语句(例如,关闭数据库连接、断开socket等)。

可以通过修改赋值来触发不同的异常,加深对异常处理的理解。在开发过程中,有时需要我们主动抛出异常。以下是一个例子:

当传入的参数数量超过3个时,就会主动抛出TypeError异常。对于这种主动抛出异常的捕获,也和之前的例子一样,使用try-except语句。

Python中的一切都是对象Object,对象又是类的实例。因此,Python中的Exception异常类同样可以被继承。通过继承Exception异常类,我们可以实现用户自定义的异常。以下是一个创建自定义异常CustomException的例子。

在抛出异常时,我们抛出刚才自定义的异常。在处理异常时,我们可以使用之前的方式,或者使用捕获未知异常的方法。两种处理方式得到的结果是一样的。

关于异常的更详细的使用请参考官方文档。