在本教程中,我们将学习Python自定义异常。如果您不了解Python异常处理,我们建议您阅读上一个教程.
Python自定义异常
在Python异常处理教程中,我们讨论了什么是异常。基本上,例外意味着事情没有相应地发展。在前面的教程中,我们讨论了不同类型的内置异常。然而,有时内置的异常不足以满足我们的需要,那么我们可以定义自己的自定义异常。
使用assert语句的Python自定义异常
使用断言语句可以最初创建自己的异常。基本上断言语句检查条件。如果不满足条件,它将抛出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
提出例外
您可以使用提升关键字。所以,你只要写提升关键字,然后是异常的名称。如果我们修改之前的代码,我们得到
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
虽然,这个例外并不是因为被零除,但我们还是看到了。因为我们提出了零除法错误。
Python自定义异常类
Python允许程序员创建自己的异常类。异常通常应该直接或间接地从异常类派生。在下面的示例中,我们创建自定义异常类UnderAge
that is derived from the base class Exception.
同样,在另一种方法中,如果条件不满足,我们将引发未成年异常。下面的代码将给您一些关于这个想法的见解。
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
输出将是
所有关于Python的自定义异常。希望,一切都更容易理解。如需进一步查询,请使用下面的注释框。
参考文献:Python用户定义的异常官方文档