标签:子类 部分 src rod 属性 hello 参数 exe name
错误:语法错误(大小写拼写错误、括号不匹配等...)=> 不能正常执行常见异常类:
1)NameError:没有定义print(a)
2)ZeroDivisionError:除数为0a = 1/0
3)IndexError:超出索引序列范围
a = [1,2,3]
print(a[4])
4)KeyError:请求一个不存在的字典关键字
a = {"key1":"123","key2":"456"}
print(a["key3"])
print(a.get("key3","test"))-----#建议用这个取值,不会报错
5)AttributeError访问对象未知属性
import math
math.xxx(4)
6)ValueError传给函数的参数类型不正确int("abc")-----#这是给int传入了字符串
异常处理机制:try...except...
执行顺序:正常执行:try-->执行代码--->结束
遇到异常:try-->遇到异常-->跳到except--->结束
ps:except分支可以有多个
执行顺序:执行匹配到第一个except则退出
如果父类异常在最前面,会吞噬所有子类异常(建议:先except子类,再except父类)
如果except捕获的错误与触发的错误不一致,程序会捕获不到
else子句:没有发生异常时执行
try:
#a = 1/0
a = "hello"
except ZeroDivisionError as ms:
print("zero division")
print(ms)
else:
print("code ok")
finally子句:不管异常有没有发生都执行
try:
# a = 1/0
b = "python"
c = [1,2,3]
print(c[4])
except ZeroDivisionError as msg:
print("zero division")
else:
print("code ok")
finally:
print("this is finally")
print("end.....")
except捕获的错误与触发的错误不一致,程序会捕获不到--->可设置多个分支
捕获到第一个except就退出
如果父类异常(Exception包括大部分异常类)在最前面,会吞噬所有异常类---建议把子类放到父类前
多函数(finally会造成异常丢失)
def func2():
try:
int("abc")
except ValueError as e:
print(e)
finally:
return "return func2"
def func1():
try:
func2()
except:
print("func1 finally")
try:
func1()
finally:
print("main finally")
手动触发异常(raise 异常名)
raise 异常类("错误说明信息")
异常嵌套:
PS:不建议使用异常来代替常规的检查,如if...else判断
避免过多依赖于异常处理机制
在必要的时候,可以手动引发异常(raise)=> 函数或方法
在函数中,需要注意在try/except/finally使用return
1.在finally中使用return,异常无法回溯
2.在函数中的try/except语句使用return后,仍然会执行finally中的内容
finally => 正常或异常都执行
return => 直接退出函数,返回值给主程序
标签:子类 部分 src rod 属性 hello 参数 exe name
原文地址:https://blog.51cto.com/13603998/2509071