Python中的异常处理函数:如何处理代码中的错误
Python中的异常处理函数是一种机制,它能够让开发者在程序执行过程中捕获并处理错误,避免程序因为未处理的错误而抛出异常而停止执行。在实际编程过程中,虽然我们尽力避免出现错误,但是不可避免的会有一些运行时错误。所以在程序执行时,我们需要对可能出现的错误或异常进行预判,并对其进行处理。
Python中的异常处理函数有三个主要的关键字:try、except、finally,其中 try 是必须的,except 和 finally 不是,它们可以分别单独出现或者同时出现,其语法如下:
try:
可能抛出异常的代码块
except 错误类型1:
处理错误类型1 的代码块
except 错误类型2:
处理错误类型2 的代码块
else:
如果没有抛出任何异常时应该执行代码块
finally:
不论是否出现异常都要执行的代码块
以上是一个简单的异常处理函数的模板,下面我们来一步步讲解其中的每一个部分。
try-except
try-except 是异常处理函数中最基础的部分。当预测到代码可能会出现错误时,可以将可能报错的代码用 try 块包裹,一旦出现错误,就会执行 except 块中的代码。
try:
# 可能会抛出异常的代码
except:
# 发生异常时候执行的代码
# "except"块可以捕捉所有的异常,不利于排查错误,因为有可能是其他不想捕获的错误
上述示例会捕获任何类型的异常,这在实际开发中不是好的实践。
如果知道将会抛出哪种类型的异常,那么可以指定具体的异常类型。
try:
# 可能会抛出异常的代码
except ValueError:
# 如果值出现错误
except FileNotFoundError:
# 如果文件不存在
except Exception as e:
# 其他异常
以上三个示例分别捕获 ValueError、FileNotFoundError 和其他异常。
可以同时指定多个异常类型或捕获所有异常,可以在多个 except 语句中包含每种异常类型或者一个 except 语句中包含所有的异常类型(使用 Exception),具体情况视需求而定。
try:
# 可能会抛出异常的代码
except (ValueError, FileNotFoundError, TypeError):
# 处理值异常或文件未发现异常或类型错误异常
except Exception as e:
# 处理其它异常
else
else 语句块是在没有抛出异常时要执行的代码块。如果在 try 块中的代码执行时没有出现异常,那么就会执行 else 块中指定的代码,否则将不会执行这块代码。
try:
3/1 # 不会抛除错误
except ValueError:
print("ValueError")
except ZeroDivisionError:
print("Error: 你不能除以0!")
else:
print("一切都好")
finally
无论是否出现异常,finally 块都会执行。finally 块通常用于释放资源,例如关闭文件、释放锁等。finally 块中的语句一定要被执行。
try:
f = open('test.txt', 'r')
for line in f:
print(line)
except:
print('An error occurred')
finally:
f.close()
异常栈
当代码在 try 块中发生异常时,程序执行流程的控制权将被传递到抛出该异常的语句下方的一个 except 块中。尽管已经被抛出的异常包含了大量有关错误发生位置的信息,但是有时会需要更多的信息以便于对错误进行排除,这时使用异常栈是一个很好的选择。
在异常处理函数中,可以通过访问当前异常的 exception 对象来获取更多有用的信息,例如当前异常的类型和回溯。
except Exception as e:
# 得到当前异常类型
print(type(e))
# 得到当前异常回溯
print(traceback.format_exc())
利用 traceback 来输出回溯信息是一种非常有效的调试方式,可以迅速定位错误发生的位置。
总结
异常处理程序是Python中非常重要的一部分,可以通过它来避免程序因为未处理的错误而抛出异常并停止执行。
使用异常处理程序可以更好的处理和显示错误,以及调试程序并解决问题。异常处理程序可以通过使用 try-except、else 和 finally 来捕获和处理错误,并在程序不受影响的情况下继续执行下去。在实际开发中,建议尽量指定具体的异常类型,以便更好地进行排查分析和解决问题。
