1.和创建普通类一样,使用class,但其必须直接或间接继承Exception
class SomeClass(Exception) :
name:""
def get_error(self,error) :
print(error)
a=SomeClass()
try :
1/0
except Exception as e:
a.get_error(e)
# E:\python项目\基础训练>E:/Anaconda/python.exe e:/python项目/基础训练/8.异常-4.异常类.py
# division by zero
#try except是典型对异常捕捉的一种方式,如果try中的代码能够正常执行,就不会执行except,如果出现异常,就会执行except的代码
#except Exception as e是一种能够获取任何异常的方法,错误信息就是e
2.except可以使用多次
try :
1/0
except ValueError :
print("其类型正确但包含的值不合适")
except ZeroDivisionError :
print("除法或求模运算的第二个参数为零")
# 除法或求模运算的第二个参数为零
#except 异常类 这种方式可以在只有这种异常时才会执行except中的代码,其他未定义或未触发的异常不会执行except的代码
#如果不想使用这么多个except的方式,可以用except (异常1,异常2……)这种方式
3.之前说过raise可以引发异常,有时候我们就是需要它引发指定的异常
try :
1/0
except ZeroDivisionError :
raise OSError
# Traceback (most recent call last):
# File "e:/python项目/基础训练/8.异常-4.异常类.py", line 19, in <module>
# 1/0
# ZeroDivisionError: division by zero
# During handling of the above exception, another exception occurred:
# Traceback (most recent call last):
# File "e:/python项目/基础训练/8.异常-4.异常类.py", line 21, in <module>
# raise OSError
# OSError
#可以看到,异常信息中不仅包含了真正的错误信息,还包含了实际上并没有引发错误的OSError
#如果你需要在某些异常后输出你想要的异常结果,并终止程序,则可以使用类似方法
4.不过你也可以使用raise 异常 from None来直接屏蔽其他异常,只输出你想要的异常、
try :
1/0
except ZeroDivisionError :
raise OSError from None
# Traceback (most recent call last):
# File "e:/python项目/基础训练/8.异常-4.异常类.py", line 50, in <module>
# raise OSError from None
# OSError