异常处理 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.....
posted @ 2019-08-12 19:58  挂机兄  阅读(152)  评论(0编辑  收藏  举报