python - 异常捕获
异常捕获
在执行python程序时,有时候会报异常,出错的原因可能是自己错写或少写,还有可能是执行程序时由于疏忽或者考虑不全造成了错误,Traceback可以追踪错误点,进行分析改正;这时我们可以对异常进行捕获处理,防止程序终止。
异常类型
-
语法错误
- 千万不能犯的!eg:if后没跟内容,for循环没写冒号等
-
逻辑错误
- 少量允许的!写完程序建议自己先测试一下~
- 修改逻辑错误的过程其实就是在从头到尾理清思路的过程
官网Built-in Exceptions👉官网内置异常汇总
异常的组成:
- traceback
翻到最下面从下往上的第一个蓝色字体鼠标左键点击即可跳转到错误的代码所在的行 - XXXError
错误的类型 - 错误类型冒号后面的内容
错误的详细原因(很重要 仔细看完之后可能就会找到解决的方法)
异常捕获原则:
异常捕获句式和万能异常:
- 有可能会出现错误的代码才需要被监测
- 被监测的代码一定要越少越好
- 异常捕获使用频率越低越好
关键字:
关键字 | 描述 |
---|---|
try/except | 普通异常捕获,可多层嵌套 |
as | 返回错误详细信息,eg:except 错误类型 as e |
else | 被监测代码不报错的时候执行 |
finally | 无论是否报错都执行flnally后内容 |
assert/isinstance | 断言,用于判断类型 |
raise | 主动报错,eg:raise+错误类型 |
try+except Exception | 万能异常模板 |
错误示例:
# 1、语法错误
if 1>2
for i in rage(10)
'''类似这种没有加冒号,缺胳膊断腿的操作属于语法错误'''
SyntaxError: invalid syntax
try /except示例:
# 普通异常捕获
try:
int('abc')
except NameError as e:
print('变量名name不存在',e)
except ValueError as e:
print('不是纯数字',e)
# 结果
不是纯数字 invalid literal for int() with base 10: 'abc'
'''try下放易错的代码,except后跟错误类型,as e为详细错误内容可以打印,这个结构可以嵌套多次,类似if-elif-else'''
try+except Exception示例:
'''
try:
可能出错的代码
except Exception:
捕获错误后输出的内容
'''
l1 = [1,2,3,4,5,6,7,8,9,11,22,33,44,55]
res = l1.__iter__()
while True:
try:
print(res.__next__())
except Exception:
print('for循环结束,自动结束,不然会报错')
break
# 结果太长了,需要的自己执行一下叭~
try/except/else/finally示例:
# else/finally示例
# 不出错的情况
try:
print('没有异常!')
except Exception:
print('没错不用走这呀')
else:
print('没错才走else下面的内容')
finally:
print('有错没有错都得走finally下的内容!!')
# 结果
'''
没有异常!
没错才走else下面的内容
有错没有错都得走finally下的内容!!
'''
# 有错的时候
try:
l = []
l[100]
print('有异常!')
except Exception:
print('有错,来了老弟')
else:
print('没错才走else下面的内容')
finally:
print('有错没有错都得走finally下的内容!!')
# 结果
'''
有错,来了老弟
有错没有错都得走finally下的内容!!
'''
assert/isinstance示例:
# assert/isinstance示例:
# 正确的情况
name = 'HammerZe'
assert isinstance(name,str)
# 错误的情况
name = 'HammerZe'
assert isinstance(name,int)
# 结果:AssertionError
'''判断类型'''
raise示例:
# raise 示例
raise NameError
# 结果:NameError
'''主动报错'''
通过异常捕获可以更快的明白如何异常处理,写的比较简单,个人复习,如有错误请指正,感谢!!!!
祝各位在修改bug的路上一路走到黑!