异常处理
异常处理
错误分类
语法错误
if 2 > 1 print(222) # 未加冒号 dic = {"name"; "alex"} # 字典中用冒号分隔键和值 tu = (2,3,4!5) # 元组中用逗号相隔
逻辑错误
num = int(input("请输入数字")) # 输入数字以外的内容,无法整型化,报错 dic = {"name": "海狗", "age": 18} dic["hobby"] # dic字典中没有["hobby"], 找不到报错
try except
try: num = int(input('>>>')) print(111) except ValueError: print(666) # input输入字符串类型的数字时, 输出111 # input输入字符串类型的非数字时, 输出666 try: dic = {'name': '嘉欣'} print(dic['age']) # 出现KeyError时 直接跳转except num = int(input('>>>')) print(111) except KeyError: print(555)
结构分类
结构1 单分支
try: num = int(input(">>>")) # 出现ValueError错误时, 直接跳转except dic = {"name": "嘉欣"} print(dic["age"]) print(111) except ValueError: print(666)
结构2 多分支
try: num = int(input(">>>")) dic = {"name": "嘉欣"} print(dic['age']) l1 = [1,2] print(l1[100]) print(111) except ValueError: print("输入的有非数字元素") except KeyError: print("没有此键") except IndexError: print("没有此下标") print(666)
结构3 万能异常处理 处理所有python可以识别的异常
try: dic = {"name": "嘉欣"} print(dic["age"]) l1 = [1,2] print(l1[100]) print(111) for i in 123: pass except Exception: print(666) # 有异常直接跳转except try: dic = {"name": "嘉欣"} # print(dic["age"]) l1 = [1,2] # print(l1[100]) print(111) for i in 123: pass except Exception as e: print(e) # 捕捉异常并打印出异常原因
tips
什么时候用万能? 什么时候用多分支?
如果你对错误信息不关心, 只是想排除信息继续让程序走下去, 用万能异常.
你对错误信息要进行明确的分流, 让你的程序多元化开发.
例如:
def func(): pass def func1(): pass dic = {1: func, 2: func1} try: num = int(input("请输入序号")) dic[num]() except ValueError: print("请输入数字") except KeyError: print("请输入范围内数字")
结构4 多分支 + 万能异常处理
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("程序出现了意料之外的错误...")
结构5 try else finally
try: dic = {"name": "嘉欣"} print(dic["age"]) l1 = [1, 2] print(l1[100]) print(111) except KeyError: print("没有此键") except IndexError: print("没有此下标") else: print("如果没有出现异常则执行这里") finally: print("finally 666") # except 必须依赖于try, else必须依赖于except和try # finally只是依赖于try
# finally : 在异常出现之前, 执行finally try: dic = {"name": "嘉欣"} print(dic["age"]) l1 = [1,2] print(l1[100]) except KeyError: print("没有此键") except IndexError: print("没有此下标") except Exception: pass print(111) finally: print("finally 666") # finally 关闭数据库连接, 文件句柄关闭,数据保存等时,用到finally # 在return 结束函数之前, 执行finally代码 def func(): try: print(111) return 666 finally: print(222) print(func()) """ 111 222 666 """
结构6 主动触发异常
raise ValueError("出现了value错误")
结构7 断言:展现出一种强硬的态度.
assert 条件 name = "alex" n1 = input("请输入:") assert name == n1 print(111) print(222)
结构8 自定义异常
# 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)
转载于//www.cnblogs.com/beichen123/p/11342254.html
还没有评论,来说两句吧...