1. 异常的概念
在编程过程中,由于各种原因会引发错误,这时程序会抛出异常来告诉程序员运行出现了问题。Python中的异常是指程序在执行过程中发生的错误,Python中的每个异常都是某个类的实例,异常分为内部异常和自定义异常,Python内置了许多类型的内部异常,比如TypeError、ZeroDivisionError等。
2. 异常的捕捉方法
2.1 try…except语句
try…except语句是最常用的异常捕捉方法,它的语法如下:
try:
# 可能会抛出异常的代码
except Exception1:
# 异常的处理方法1
except Exception2:
# 异常的处理方法2
else:
# 如果没有抛出异常,则执行的代码
finally:
# 不管有没有异常都会执行的代码
在这个语法中,try代码块之后的代码可能会抛出异常,如果出现异常则执行对应的except代码块中的代码来进行异常的处理。except后面可以跟多个异常类型,如果不指定异常类型,则捕捉所有类型的异常。
在执行完try或except代码块之后,如果没有抛出异常,则会执行else代码块中的代码。无论是try还是except代码块中的内容是否发生异常,finally中的代码一定会被执行。
2.2 try…finally语句
try…finally语句也是一种异常处理机制,它的语法如下:
try:
# 可能会抛出异常的代码
finally:
# 不管有没有异常都会执行的代码
在这个语法中,try代码块之后的代码可能会抛出异常,如果出现异常则直接跳到finally代码块中执行代码,finally代码块中的代码一定会执行。
3. 异常的补救方法
3.1 抛出自定义异常
在Python中可以通过raise语句来抛出自定义异常,raise语法如下:
raise ExceptionClassName(“Exception message”)
ExceptionClassName是自定义异常的名称,Exception message是异常信息,可以将其中包含有用的信息传递给异常的处理方法。
3.2 再次抛出异常
在处理异常的过程中,有时会需要再次抛出异常,可以通过raise语句来实现。raise语法如下:
try:
# 可能会抛出异常的代码
except Exception1:
# 异常的处理方法1
# 如果需要再次抛出相同的异常,可以使用以下代码
raise
except Exception2:
# 异常的处理方法2
# 如果需要抛出不同的异常,可以使用以下代码
raise ExceptionClassName(“Exception message”)
在这个语法中,当try代码块中的第一个异常被捕捉到时,程序会执行except代码块,如果需要再次抛出相同的异常可以使用raise语句而不指定异常类型。如果需要抛出不同的异常,可以通过raise语句指定异常类型和异常信息。
3.3 继续运行程序
在异常处理程序中,可以使用continue语句或return语句来继续执行程序,以下是continue语句的语法:
while True:
try:
b = int(input(“Please input a number: ”))
except ValueError:
print(“Invalid input, please input a integer number.”)
continue
else:
# 如果输入正确就打印出这个数的平方
print(b ** 2)
当用户输入非数字字符串时,程序会进入except代码块中,使用continue语句返回到while循环的初始位置,等待用户输入合法的数字字符串。
3.4 降低异常影响的方法
在Python中,可以通过日志系统或者调试模块来降低异常的影响,这里介绍Python的日志模块logging。
import logging
logging.basicConfig(filename=“test.log”, level=logging.DEBUG)
try:
# 可能会抛出异常的代码
except Exception as e:
logging.exception(str(e))
在这个例子中,当try代码块中的代码可能会抛出异常时,程序会捕捉到这个异常,并使用logging.exception()方法来打印异常信息到test.log日志文件中。这样可以在程序出现异常时,将异常信息记录在日志文件中,方便程序员查找问题。
4. 实例说明
以下是将两个数字相加的代码,当用户输入非数字字符串时,程序会抛出异常。我们可以通过try…except…语句来捕捉到异常,并提示用户重新输入。如果用户输入的字符串中含有“q”或者“Q”时,程序会结束运行。
while True:
try:
a = input(“Please input the first number: ”)
if a.upper() == “Q”:
break
b = input(“Please input the second number: ”)
if b.upper() == “Q”:
break
a = float(a)
b = float(b)
except ValueError:
print(“Invalid input, please input numbers.”)
else:
s = a + b
print(“The sum of ” + str(a) + “ and ” + str(b) + “ is ” + str(s))
通过这个例子,我们可以看出如何使用try…except…语句来处理异常,并通过具体的例子展示异常处理的效果。