异常
异常的概念
。程序在运行时,如果Python解释器遇到一个错误,会停止程序的执行,并且提示一些错误信息,就是异常
。程序停止执行并且提示错误信息这个动作,我们通常称之为:抛出(raise)异常
程序开发时,很难将所有的特殊情况都处理的面面俱到,通过异常捕获可以针对突发事件做集中的处理,从而保证程序的稳定性和健壮性
捕获异常
在程序开发中,如果对某些代码的执行不能确定是否正确,可以增加try(尝试)来捕获异常
语法:
try: 尝试执行的代码 except: 出现错误的处理
。try尝试,下方编写要尝试代码,不确定是否能够正常执行的代码
。except如果不是,下方编写尝试失败的代码
错误类型捕获
在程序执行时,可能遇到不同类型的异常,并且需要针对不同类型的异常,做出不同的响应,这个时候,就需要捕获错误类型了
语法如下:
try: # 尝试执行的代码 except 错误类型1: # 针对错误1,对应的处理 except 错误类型2: #针对错误2,对应的处理 except Exception as result: print("位置错误 %s" % result)
。当Python解释器抛出异常时,最后一行错误信息的第一个单词就是错误类型
异常捕获完整语法
语法如下:
try: #尝试执行的代码 except 错误类型1: # 针对错误类型1,对应的代码处理 except 错误类型2: # 针对错误类型2,对应的代码处理 except (错误类型3,错误类型4) # 针对错误类型3,4,对应的代码处理 except Exception as result: # 打印错误类型 else: # 没有异常才会执行的代码 finally: # 无论是否有异常,都会执行的代码
else只有在没有异常时才会执行的代码
finally无论是否有一场,都会执行的代码
异常的传递
。异常的传递——当函数/方法执行出现异常,会将异常传递给函数/方法的调用一方
。如果传递到主程序,仍然没有异常处理,程序才会被终止
提示:
。在开发中,可以在主函数中增加异常捕获
。而在主函数中调用的其他函数,只要出现异常,都会传递到主函数的异常捕获中
。这样就不需要再代码中,增加大量的异常捕获,能够保证代码的整洁
示例:
def demo1(): return int(input("请输入整数:")) def demo2(): return demo1() # 利用异常的传递性,在主程序捕获异常 try: print(demo2()) except Exception as result: print("未知错误 %s" %result)
抛出raise异常
。在开发中,处理代码执行错误Python解释器会抛出异常之外,还可根据业务需求主动抛出异常
示例:
def input_password(): # 1.提示用书输入密码 pwd = input("输入密码:") # 2.判断密码长度 >=8,返回用户输入的密码 if len(pwd) >= 8: return pwd # 3.如果<8主动抛出异常 # 创建异常对象 ex = Exception("长度不够") # 主动抛出异常 raise ex try: print(input_password()) except Exception as result: print(result)