📅  最后修改于: 2023-12-03 15:09:56.101000             🧑  作者: Mango
在编写程序时,我们会经常遇到错误和异常,如果不加处理直接让程序终止,可能会导致整个系统崩溃,并造成不必要的损失。为了避免这种情况的发生,我们通常会使用异常处理机制,对于可能产生异常的代码,我们使用try...except
关键字对其进行捕获和处理。
除了捕获系统抛出的异常外,我们还可以手动创建异常实例,用于通知程序发生了某种自定义的异常情况。手动创建异常通常需要自定义异常类,并在程序中使用raise
关键字抛出异常实例。在哪里手动创建异常,取决于你的业务需求。
下面我们看一下手动创建异常的几个实例:
class MyException(Exception):
def __init__(self, msg):
self.msg = msg
def divide(a, b):
if b == 0:
raise MyException("除数不能为0!")
return a/b
try:
divide(3, 0)
except MyException as e:
print(e.msg)
在上述代码中,我们定义了一个自定义异常类MyException
,在函数divide
中如果除数为0,则手动创建MyException
异常实例,并将异常实例raise
抛出。在try...except
中捕获MyException
异常,输出异常信息。
class Person:
def __init__(self, name, age):
if not isinstance(name, str):
raise ValueError("name必须是字符串类型!")
if not isinstance(age, int):
raise ValueError("age必须是整数类型!")
self.name = name
self.age = age
try:
p = Person(123, '23')
except ValueError as e:
print(e)
在上述代码中,我们在类Person
的构造方法中,对传入的参数进行类型检查,如果参数类型不符合要求,手动创建ValueError
异常实例,并将异常实例raise
抛出。在try...except
中捕获ValueError
异常,输出异常信息。
filename = 'test.txt'
try:
with open(filename, 'r') as f:
pass
except FileNotFoundError as e:
print("文件不存在!")
raise # 将异常继续抛出
except Exception as e:
print("文件打开失败!")
raise # 将异常继续抛出
在上述代码中,我们通过with open()
语句打开一个文件,在try...except
块中捕获文件不存在和文件打开失败两种异常情况。如果文件不存在,手动创建FileNotFoundError
异常实例,并输出自定义异常信息;如果文件打开失败,则手动创建Exception
异常实例,并输出自定义异常信息。在每个except
块中,重新raise
抛出异常,以便于调用者继续处理异常。