异常处理 try
语法错误
这种错误的不能使用异常处理,你自己粗心写错怪谁,哼哼哼
比如说少冒号啦,丢了括号啦
逻辑错误
try:
num = int(input("请输入数字"))
print(111)
except ValueError:
print(666)
# 输入 1q
# 输出 666
结构一 : 单分支
try:
num = int(input("请输入数字:"))
# 出现 ValueError 错误之后,直接跳到 except 语句
dic = {'name':"海狗"}
print(dic['age'])
print(111)
except ValueError:
print(666)
''''
请输入数字:1q
666
'''
**结构二 : 多分支 **
try:
num = int(input('请输入数字:'))
# 输入的时候 出现ValueError
# 错误之后,直接跳转到except 语句
dic = {'name':'嘉欣'}
print(dic['age'])
l1 = [1,2]
print(l1[100])
print(111)
except ValueError:
print("输入的有非数字元素")
except KeyError:
print('没有此键')
except IndexError:
print('没有此下标')
print(666)
'''
请输入数字:1 去
输入的有非数字元素
666
'''
结构三 : 万能异常 处理所有 Python识别的异常
try:
dic = {'name':'海狗'}
# print(dic['age'])
l1 = [1,2]
print(l1[100])
print(111)
for i in 123: # 'int' object is not iterable
pass
except Exception as e:
print(e)
print(666)
''''
list index out of range
666
直接说明错的原因了
'''
还挺好玩的
什么时候用万能 ? 什么时候用分支 ?
万能 : 如果你对错误信息不关心,只是想要排除错误让程序继续运行. 用万能异常.
分支 : 你对错误信息要进行明确的分流,让你的程序多元化开发.
结构四 : 多分支加万能异常
def func():
pass
def func1():
pass
dic = {
1 : func,
2 : func1
}
try:
num = int(input('请输入序号:'))
dic[num]()
except ValueError:
print("请输入数字:")
except KeyError:
print("请输入范围内的序号")
except Exception:
print('程序出现意料之外的错误')
'''
请输入序号:111
请输入范围内的序号
'''
结构5 : try else finally
except 必须依赖于try, else必须依赖于except和try
# finally只是依赖于try.
在 return 结束函数之前,执行 fially 代码
def func():
try:
print(111)
return 555
finally:
print(222)
print(func())
'''
111
222
555
'''
结构六 : 主动触发异常
raise ValueError('出现了value错误')
结构7: 断言: 展现出一种强硬的态度.
name = 'alex'
n1 = input('请输入:')
assert name == n1
print(111)
print(222)
这是啥意思啊,完全不懂呀输入直接就报错
自定义异常
Python 中给你提供的错误很多,但不是全部的错误
class LiYeError(BaseException):
def __init__(self,msg):
self.msg = msg
def __str__(self):
return self.msg
try:
raise LiYeError('socket.connent.....')
except LiYeError as e:
print(e)
# socket.connent.....