Python自定义异常
时间:2020-02-23 14:42:35 来源:igfitidea点击:
在本教程中,我们将学习Python自定义异常。
如果您不了解Python异常处理,建议您阅读上一教程。
Python自定义异常
在Python异常处理教程中,我们讨论了什么是异常。
基本上,异常是指情况没有相应发展的情况。
在上一教程中,我们讨论了不同类型的内置异常。
但是,有时内置的异常不足以满足我们的需要,那么我们可以定义自己的自定义异常。
使用assert语句的Python自定义异常
使用assert语句,您可以最初创建自己的异常。
基本上断言语句检查条件。
如果不满足条件,则将抛出AssertionError。
假设您编写了一个函数,以年龄作为参数。
如果年龄小于18岁,您不想让程序员使用该功能。
def input_age(age):
try:
assert int(age) > 18
except ValueError:
return 'ValueError: Cannot convert into int'
else:
return 'Age is saved successfully'
print(input_age('23')) # This will print
print(input_age(25)) # This will print
print(input_age('nothing')) # This will raise ValueError which is handled
print(input_age('18')) # This will raise AssertionError and the the program collapse
print(input_age(43)) # This will not print
以下程序的输出将是
Age is saved successfully
Age is saved successfully
ValueError: Cannot convert into int
Traceback (most recent call last):
File "/home/imtiaz/ExceptionHandling.py", line 13, in
print(input_age('18')) # This will raise AssertionError the the program collapse
File "/home/imtiaz/ExceptionHandling.py", line 3, in input_age
assert int(age) > 18
AssertionError
引发异常
您可以使用raise关键字引发现有异常。
因此,您只需要简单地写上raise关键字,然后写上异常的名称即可。
如果我们修改前面的代码,我们得到
def input_age(age):
try:
if(int(age)<=18):
raise ZeroDivisionError
except ValueError:
return 'ValueError: Cannot convert into int'
else:
return 'Age is saved successfully'
print(input_age('23')) # This will execute properly
print(input_age('18')) # This will not execute properly
代码的输出将是
Age is saved successfully
Traceback (most recent call last):
File "/home/imtiaz/ExceptionHandling.py", line 12, in
print(input_age('18')) # This will not print
File "/home/imtiaz/ExceptionHandling.py", line 4, in input_age
raise ZeroDivisionError
ZeroDivisionError
虽然,该异常不是由于被零除,但还是可以看到。
因为我们提出了ZeroDivisionError。
Python自定义异常类
Python允许程序员创建自己的异常类。
通常,异常应该直接或者间接地从Exception类派生。
在以下示例中,我们创建自基类Exception派生的自定义异常类" UnderAge"。
同样,在另一种方法中,如果不满足条件,则引发UnderAge异常。
以下代码将使您对该想法有所了解。
class UnderAge(Exception):
pass
def verify_age(age):
if int(age) < 18:
raise UnderAge
else:
print('Age: '+str(age))
# main program
verify_age(23) # won't raise exception
verify_age(17) # will raise exception

