异常 Exception
什么是错误:
错误是指由于逻辑或语法等导致一个程序无法正常执行的问题
什么是异常
异常是程序出错时标识的一种状态
作用:
用于信号,通知上层调用者有错误产生,需要处理
try 语句的两种语法:
try-except 语句
try-finally 语句
try-except语句
语法:
try: 可能触发异常的语句 except 错误类型1 [as 变量1]: 异常处理语句1 except 错误类型2 [as 变量2]: 异常处理语句2 except (错误类型3,错误类型4) [as 变量3]: 异常处理句块3 ... except: 其它异常处理语句 else: 未发生异常语句 finally: 最终语句 注: [] 代表其中的内容可以省略 作用: 偿式捕获异常,得到异常通知,将程序由异常流程转为正常流程并继续执行
# 此示例示意异常处理语句try-except 的语法和用法 def div_apple(n): print("%d个苹果你想分给几个人?" % n) s = input("请输入人数: ") cnt = int(s) # 可能触发ValueError类型的错误 result = n / cnt # 可能触发ZeroDivistion类型的错误 print('每个人分了', result, '个苹果') try: print("开始分苹果") div_apple(10) print('分苹果成功!') except ValueError: print("分苹果过程中出现错误,分苹果失败!!!") except ZeroDivisionError: print("没有人来,苹果被收回,自己吃了!!!") print("程序正常退出")
# 此示例示意异常处理语句try-except 的语法和用法 def div_apple(n): print("%d个苹果你想分给几个人?" % n) s = input("请输入人数: ") cnt = int(s) # 可能触发ValueError类型的错误 result = n / cnt # 可能触发ZeroDivistion类型的错误 print('每个人分了', result, '个苹果') try: print("开始分苹果") div_apple(10) print('分苹果成功!') except (ValueError, ZeroDivisionError): print("分苹果失败,苹果不分了!") print("程序正常退出")
try-finally语句
语法:
try:
可能触发异常的语句
finally:
最终语句
说明:
finally 子句不可以省略一定不存在except 子句
作用:
通常用try-finally语句来做触发异常时必须要处理的事情,无论异常是否发生,finally子句都会被执行try-finally 语句不会改变程序的(正常/异常)状态
# 此示例示意try-finally语句的作用和用法 def fry_egg(): # 煎鸡蛋 print("打开天燃气...") try: count = int(input('请输入鸡蛋个数: ')) print('成功煎了', count, '个鸡蛋') finally: print("关闭天燃气") try: fry_egg() except: print("煎鸡蛋过程中出错") print("程序正常退出")
raise 语句
作用:
触发一个错误,让程序进入异常状态发送错误通知给调用者
语法:
raise 异常类型
或
raise 异常对象
或
raise # 重新触发上一次异常
# 此示例示意raise语句的作用和用法 def make_except(): print('函数开始') # 在此处发错ValueError类型的错误通知给上层调用者 raise ValueError print("函数结束") try: make_except() except ValueError: print("收到make_except函数内部发生的错误通知!!!") print("程序运行结束")
# 此示例示意用raise语句来传递错误信息 def fx(): print("fx开始") # ... 此处可能会触发异常 error = ValueError("这是错误信息!!!") raise error print("fx结束") def fy(): print('fy开始') try: fx() except ValueError as e: print("fx函数发生错误,e=", e) raise # 等同于 raise e print('fy结束') try: fy() except ValueError as err: print("收到fy函数内部发生了错误,数据是", err) print("程序正常结束")
assert语句(断言语句)
语法:
assert 真值表达式,错误数据(通常是字符串)
作用:
当真值表达式为False时,用错误数据创建一个AssertionError类型的错误,并进入异常状态
等同于
if bool(真值表达式) == False:
raise AssertionError(错误数据)
def get_age(): '''此函数只返回1~140的整数''' s = input('请输入学生年龄:') a = int(s) assert 1 <= a <= 140, '年龄超出范围' return a try: age = get_age() print('学生的年龄是:',age) except ValueError: print('用户输入的不是整数!!')
异常相关的语句:
try-except 语句
接收错误通知
try-finally 语句
无论是正常流程还是异常流程,执行必须要执行的语句
raise 语句
触发错误通知,让程序进行异常流程
assert 语句
根据条件触发AssertionError类型的异常通知,让程序进入异常流程