在 Python 中引发异常
我们将介绍在 Python 中引发异常的不同方法。
在 Python 中引发异常
当我们编写 Python 程序并运行它们时,如果程序中缺少某些内容或代码中有错误,它会给出输出或错误。异常类似于 Python 编程语言中的异常。
当我们的程序做错事时,Python 会引发许多内置异常。如果在我们尝试运行程序时发生任何异常,它会停止程序并显示程序尝试运行代码时发生的异常。
本文通过一些简单的程序演示了如何使用 try
、except
和 finally
语句处理 Python 程序中的异常。
Python 中的 try
语句
在 Python 中,我们可以通过在代码中使用 try
语句来处理异常,以最大限度地减少异常的机会。try
子句包含可能产生异常的关键操作。
except
子句包含解决异常的代码。
现在,让我们看一个例子,如果用户输入错误的值,使用 try
语句引发异常。
# python
Any_List = [2,'Husnain',4,6,8]
for value in Any_List:
try:
print("The value is", value)
raci = 1/int(value)
print("The reciprocal of", value, "is", raci)
print("")
except:
print("Oops! There is a string in this list.")
print("The reciprocal of", value, "cannot be done!")
print("")
输出:
上面的例子显示了这个程序遍历了 Any_List
中的条目,如果没有异常,except
块将被跳过,代码将顺利运行,直到它到达 Any_List
中的最后一个元素.
但是,如果在遍历 Any_List
中的所有元素时出现异常,except
块将被执行,并打印如上结果所示的值。
现在,让我们举一个例子,我们将在其中创建三个不同的 except
案例。我们在上面的程序中提到了只有一个 except
块的 try
语句。
但是在这个程序中,我们使用了三个 except
块,它们提供了更多选择子句的选项。
# python
VAR0 = 10
try:
VAR1 = int("Husnain")
VAR2 = int(56)
result = (int(VAR1) * int(VAR2))/(VAR0 * int(VAR2))
except ValueError as ve:
print(ve)
exit()
except TypeError as te:
print(te)
exit()
except:
print('Unexpected Error!')
exit()
print (result)
输出:
这是一个包含三个异常块的程序。现在,让我们来看看另一种方法,raise
,它可以用来在 Python 中引发异常。
Python 中的 raise
关键字
当 Python 编程运行时代码中出现一些错误时,就会引发异常。我们可以使用 raise
关键字手动引发异常。
我们还可以将值传递给异常,以提供有关异常以及程序引发它的原因的更多信息。
让我们举个例子,我们将使用 raise
关键字手动引发错误。
# python
try:
num=int(-23)
if num <= 0:
raise ValueError("entred number is not positive")
except ValueError as ve:
print(ve)
输出:
上面的例子表明,输入负数会引发我们通过 raise
关键字设置的异常。
现在,让我们来看另一个示例,在该示例中,我们将使用 else
子句手动引发异常。
Python 中的 else
子句
在某些情况下,当我们想在 try
语句下运行程序没有任何错误时,我们会使用 else
语句来完成程序处理。
# python
try:
number = int(21)
assert number % 2 == 0
except:
print("It is not a even number!")
else:
reciprocal = 1/number
print(reciprocal)
输出:
从上面的例子可以看出,如果输入的数是偶数,那么程序输出这个数的倒数,如果不是偶数,就会抛出异常,如上结果所示。
Rana is a computer science graduate passionate about helping people to build and diagnose scalable web application problems and problems developers face across the full-stack.
LinkedIn