Python基础之异常处理

在程序运行的过程中,如果发生了错误,可以事先约定返回一个错误代码,这样,就可以知道是否有错,以及出错的原因。在操作系统提供的调用中,返回错误码非常常见。为函数本身应该返回的正常结果和错误码混在一起,造成调用者必须用大量的代码来判断是否出错。因此高级语言通常都内置了一套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用来处理错误十分方便。出错时,会分析错误信息并定位错误发生的代码位置才是最关键的。

程序也可以主动抛出错误,让调用者来处理相应的错误。但是,应该在文档中写清楚可能会抛出哪些错误,以及错误产生的原因。