1. 异常处理的概念
在编程过程中,经常会出现错误。例如,文件可能不存在、网络连接可能断开、用户输入了无效的数据等等,这些错误都被称为异常。异常处理是指在程序运行过程中遇到异常时,提供能够在错误情况下继续执行的方法,而不是直接退出程序。
Python 提供了 try...except 语句来处理异常。Python 运行 try 块中的代码,如果发生异常,则跳过 try 块中的其余代码并转到 except 块。如果 try 块中没有异常,则 except 块将不会被执行。
2. 语法格式
try...except 语句的语法格式如下:
try:
# 监视的代码块
except ExceptionType:
# 发生异常时要执行的代码块
其中,try 后面跟着要被监视的代码块,ExceptionType 是指要捕获的异常类型。
3. 捕获多个异常类型
有时候,我们需要在一个 except 块中捕获多个异常类型。在 Python 中,可以用元组来进行实现:
try:
# 监视的代码块
except (ExceptionType1, ExceptionType2, ExceptionType3):
# 发生异常时要执行的代码块
这里要注意,如果捕获多个异常类型,并且这些异常类型有继承关系,那么子类异常应该放在父类异常之前。否则,将永远不会执行子类异常的代码块。
4. 捕获所有异常类型
有时候,在编写代码的时候,我们不确定会发生哪些异常。在这种情况下,可以使用以下语法捕获所有异常:
try:
# 监视的代码块
except:
# 发生异常时要执行的代码块
这里要注意,except 后面没有指定异常类型。这意味着它捕获所有类型的异常,包括系统异常、程序异常等等。
5. 捕获异常信息
可以使用 except 语句来捕获异常信息,然后在程序中进行处理。Python 中,异常信息包括异常类和异常实例(即异常的具体信息)。可以使用以下代码来获取异常信息:
try:
# 监视的代码块
except ExceptionType as e:
# 发生异常时要执行的代码块
print(e)
在这里,as 关键字用于指定异常实例的名称。在 except 块中,我们可以使用这个名称来操作异常实例。
6. finally 块
在 try...except 语句中,可以使用 finally 块,无论是否发生异常,它都会被执行:
try:
# 监视的代码块
except:
# 发生异常时要执行的代码块
finally:
# 不管是否发生异常都会被执行的代码块
finally 块通常被用来处理资源清理操作,例如关闭文件、释放网络连接等等。
7. 自定义异常
Python 也支持自定义异常。自定义异常通常用于处理特定情况下的错误。要定义异常,可以继承内置的 Exception 类或其子类。
class MyError(Exception):
def __init__(self, value):
self.value = value
def __str__(self):
return repr(self.value)
try:
raise MyError(2)
except MyError as e:
print('My exception occurred, value:', e.value)
在这里,我们自定义了一个异常类 MyError。在程序运行时,raise 语句将抛出 MyError 异常,然后 except 块捕获并处理这个异常,并打印出异常信息。
8. 小结
异常处理是编程中不可避免的部分。Python 提供了 try...except 语句来有效地处理异常。通过学习其中的语法格式,可以更好地了解 Python 里面的异常处理机制。此外,了解如何自定义异常,可以帮助我们更好地处理特定情况下的错误。