python中的异常处理之try..except

异常处理之try…except

在写python代码时,有时可能会因某些原因使代码出错——具体原因具体分析,我们有时候需要知道报错的原因才能更加方便的去改正错误。

下边举例说明python中的错误

1.语法错误

# 例1
if 2>1
    print(2222)
    
# 例2   
dic = {
    
    "name";"alex"}
tu = (2,3,4''6)

# 错误提示:SyntaxError: invalid syntax

2.逻辑错误

dic = {
    
    "name":"海狗","age":18}
dic["hobby"]

# 错误提示:KeyError: 'hobby'

常用的是if进行异常判断,但是下边将以try进行举例:

单分支:

try:
    num = int(input(">>>")) #出现value错误之后,直接跳转except语句
    print(111)
except ValueError:
    print(666)

# >>>a
# 666
try:
    dic = {
    
    "name":"嘉欣"}
    print(dic["age"])
    num = int(input(">>>"))  # 出现value错误之后,直接跳转except语句
    print(111)
except ValueError:
    print(666)

# KeyError: 'age'

try:
    dic = {
    
    "name":"嘉欣"}
    print(dic["age"])
    num = int(input(">>>"))  # 出现value错误之后,直接跳转except语句
    print(111)
except KeyError:
    print(666)

# 666 

多分支:

try:
    num = int(input(">>>"))  # 出现value错误之后,直接跳转except语句
    dic = {
    
    "name": "嘉欣"}
    #print(dic["age"])
    l1 = [1,2]
    print(l1[100])
except ValueError:
    print("输入的有非数字元素")
except KeyError:
    print("没有此键")
except IndexError:
    print("没有此下标")
print(666)

# >>>1233
# 没有此键
# 666

# >>>asd
# 输入的有非数字元素
# 666

# >>>123
# 没有此下标
# 666

万能一异常:

try:
    dic = {
    
    "name": "嘉欣"}
    # print(dic["age"])
    l1 = [1,2]
    print(l1[100])
    print(111)
    for i in 123:
        pass
except Exception as e: # Exception 会将错误报出来
    print(e)

# 'age'
# list index out of range
# 'int' object is not iterable

什么时候用万能? 什么时候用多分支?

如果你对错误信息不关心,只是想要排除错误让程序继续运行,用万能异常

但一般写代码…也不要每段都加try…那不是自寻烦恼吗

多分支加万能

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("程序出现意料之外的错误....")

# 请输入序号456
# 请输入范围内的序号

# 请输入序号asfd
# 请输入数字

# 请输入序号1

try else finally 结构:

try:
    dic = {
    
    "name": "嘉欣"}
    #print(dic["age"])
    l1 = [1,2]
    # print(l1[100])
    print(111)
except ValueError:
    print("输入的有非数字元素")
except KeyError:
    print("没有此键")
else:
    print("如果没有出现异常则执行这里")
finally:
    print("finally 666")

# 没有此键
# finally 666

# finally 666
# IndexError: list index out of range

# 111
# 如果没有出现异常则执行这里
# finally 666

# 如果将except都注释掉
try:
    dic = {
    
    "name": "嘉欣"}
    # print(dic["age"])
    l1 = [1,2]
    # print(l1[100])
    print(111)
# except ValueError:
#     print("输入的有非数字元素")
# except KeyError:
#     print("没有此键")
# else:
#     print("如果没有出现异常则执行这里")
finally:
    print("finally 666")

# 111
# finally 666

except必须依赖于try else必须依赖于except和try
finally只是依赖于try
finally:在异常出现之前,执行finally
finally用在关闭数据库连接,文件句柄关闭,数据保存等,用到finally

with open("teat1",encoding="utf-8",mode="a+") as f1:
    try:
        for i in f1:
            print(i)
        if ....:
    finally:
        f1.close()
# SyntaxError: invalid syntax
def func():
    try:
        print(111)
        return 666
    finally:
        print(22)
print(func())

# 111
# 22
# 666

在return结束函数之前,执行finally代码

while 1:
    try:
        print(1)
        break
    finally:
        print(222)

# 1
# 222

在break之前,执行finally代码

主动触发异常:

raise ValueError("出现了value错误")

# ValueError: 出现了value错误

断言:展现出一种强硬的态度

name = "1"
n1 = input("请输入:")
assert name == n1
print(111)
print(222)

# 请输入:as
# AssertionError

#请输入:1
# 111
# 222

自定义异常:
python中给你提供的错误类型很多,但不是全部的错误,有些错误需要你自定义

class LiYeError(BaseException):
    def __init__(self,msg):
        self.msg=msg
    def __str__(self):
        return self.msg

try:
    raise LiYeError('类型错误')
except LiYeError as e:
    print(e)

# 类型错误

以上,希望能给你带来帮助~

猜你喜欢

转载自blog.csdn.net/m0_50481455/article/details/113267613