在程序运行的过程中,如果发生了错误,可以事先约定返回一个错误代码,这样,就可以知道是否有错,以及出错的原因。在操作系统提供的调用中,返回错误码非常常见。为函数本身应该返回的正常结果和错误码混在一起,造成调用者必须用大量的代码来判断是否出错。因此高级语言通常都内置了一套try...except...finally...的错误处理机制,Python也不例外。
什么是异常?异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行。一般情况下,在Python无法正常处理程序时就会发生一个异常。异常是Python对象,表示一个错误。当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行。
异常处理:捕捉异常可以使用try/except语句。try/except语句用来检测try语句块中的错误,从而让except语句捕获异常信息并处理。如果你不想在异常发生时结束你的程序,只需在try里捕获它。
捕获异常
try:
逻辑代码块
except ExceptionType as err:
异常处理方法
捕获多个异常
try:
逻辑代码块
except (ExceptionType1,ExceptionType2,...) as err:
异常处理方法
捕获所有可能发生的异常
try:
逻辑代码块
except (ExceptionType1,ExceptionType2,...) as err:
异常处理方法
except Exception as err:
异常处理方法
try:
open("test.txt", "r")
except NameError as err1:
print("捕获到了异常!",err1)
except Exception as err2:
print("捕获所有可能的异常",err2)
print("哈哈哈哈哈")
finally
当我们认为某些代码可能会出错时,就可以用try来运行这段代码,如果执行出错,则后续代码不会继续执行,而是直接跳转至错误处理代码,即except语句块,执行完except后,如果有finally语句块,则执行finally语句块,至此,执行完毕。
try:
逻辑代码块
except (ExceptionType1,ExceptionType2,...) as err:
异常处理方法
except Exception as err:
异常处理方法
finally:
无论是否有异常产生,都会执行这里的代码块!
'''
#finally的使用
'''
f = None
try:
f = open("test.txt","r")
print("打印文件内容")
except FileNotFoundError as error:
print("捕获到了异常",error)
finally:
print("关闭文件")
if f != None:
print("正在关闭文件")
f.close()
不需要在每个可能出错的地方去捕获错误,只要在合适的层次去捕获错误就可以了。这样一来,就大大减少了写try...except...finally的麻烦。
函数嵌套异常传递
'''
#函数嵌套,异常传递
'''
def test1():
print("------test1-1--------")
print(num) #打印一个不存在的变量
print("------test1-2--------")
def test2():
try:
print("------test2-1--------")
test1()
print("------test2-2--------")
except Exception as error:
print("捕获到异常",error)
print("------test2-3--------")
test2()
Python内置的try...except...finally用来处理错误十分方便。出错时,会分析错误信息并定位错误发生的代码位置才是最关键的。
程序也可以主动抛出错误,让调用者来处理相应的错误。但是,应该在文档中写清楚可能会抛出哪些错误,以及错误产生的原因。