Python3中的异常处理
在程序设计中,异常处理是一项非常重要的技术。Python3中提供了try…except…语句来帮助我们处理异常。在本文中,我们将会详细介绍Python3中的异常处理,并且给出一些示例代码来帮助大家更好地理解如何使用try…except…语句来处理异常。
什么是异常处理
在程序执行过程中,可能会遇到一些意外情况,比如除数为0、文件不存在、网络连接超时等等。这些意外情况就称为异常。异常处理是指在程序执行过程中,当遇到异常的时候,程序不会直接崩溃,而是会根据我们事先定义好的处理方式来进行相应的处理。
在Python3中,我们可以使用try…except…语句来处理异常。try中的代码块是我们要执行的代码,except中的代码块是对异常的处理方式。
基本的异常处理示例
下面我们来看一个基本的异常处理示例。我们将尝试打开一个不存在的文件,并捕获文件不存在的异常。
try:
f = open('test.txt', 'r')
except FileNotFoundError:
print('文件不存在')
运行以上代码,输出为:
文件不存在
捕获多个异常
除了捕获单个异常外,我们还可以捕获多个异常。下面的示例代码将尝试将一个字符串转换为整数,并捕获可能的异常。
try:
int('deepinout')
except ValueError:
print('数值转换异常')
except TypeError:
print('类型错误')
运行以上代码,输出为:
数值转换异常
使用as
关键字获取异常信息
在捕获异常时,我们可以使用as
关键字来获取异常信息。下面的示例代码将尝试将一个字符串转换为整数,并获取具体的异常信息。
try:
int('deepinout')
except ValueError as e:
print('出现数值转换异常:', e)
运行以上代码,输出为:
出现数值转换异常: invalid literal for int() with base 10: 'deepinout'
使用finally
关键字
除了try、except之外,我们还可以使用finally
关键字来定义无论异常是否发生都需要执行的代码。下面的示例代码将尝试从一个元组中取出一个不存在的元素,并使用finally
关键字来进行资源的释放。
try:
nums = (1, 2, 3)
num = nums[4]
except IndexError:
print('下标越界')
finally:
print('资源释放')
运行以上代码,输出为:
下标越界
资源释放
自定义异常
在Python3中,我们也可以自定义异常。下面的示例代码演示了如何定义一个自定义异常,并在产生异常时抛出这个异常。
class MyCustomException(Exception):
pass
try:
raise MyCustomException('自定义异常')
except MyCustomException as e:
print('捕获到自定义异常:', e)
运行以上代码,输出为:
捕获到自定义异常: 自定义异常
综合示例
下面的示例代码结合了try…except…语句的各种用法,包括捕获多个异常、获取异常信息和最终执行。
import urllib.request
from urllib.error import HTTPError, URLError
try:
response = urllib.request.urlopen('http://www.deepinout.com')
except HTTPError as e:
print('HTTPError:', e)
except URLError as e:
print('URLError:', e)
finally:
print('程序执行完毕')
运行以上代码,输出为:
URLError: <urlopen error [Errno -2] Name or service not known>
程序执行完毕
通过以上示例,我们详细介绍了Python3中异常处理的相关内容,并给出了多个示例代码。