python异常的捕捉和补救实例详解

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…语句来处理异常,并通过具体的例子展示异常处理的效果。

后端开发标签