Python异常处理

异常介绍

异常的概念

示例:

def show(n):
    # 定义一个列表
    list = [1, 2, 3, 4, 5]

    if n >= len(list):
        print("IndexError: list index out of range")
    # 从列表中获取数据
    # print(list1[5]) # IndexError: list index out of range
    # print(list1[n])


if __name__ == '__main__':
    show(5)

总结:

  • 异常指是Python程序发生的不正常事件,异常可称为错误

  • 当检测到一个错误时,Python解释器就无法正常继续工作,会出现一些错误提示信息,这些信息就叫做异常信息,这就是我们常说的bug。

  • 通常情况下Python中的异常的名称是以Error结尾

常见的异常

示例:

# NameError、IndexError、KeyError、TypeError
print(12 + '12')  # TypeError: unsupported operand type(s) for +: 'int' and 'str'
print('12' + 12)  # TypeError: can only concatenate str (not "int") to str

dict1 = {
    "key1": 123,
    "key2": 321
}

print(dict1["key3"])    # KeyError: 'key3'

print(a)  # NameError: name 'a' is not defined

处理异常

捕获一个异常

示例:

# 创建一个列表
list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# 制造一个IndexError

try:
    print(list1[10])

except IndexError:
    print("发生了异常")

print("Holle World")

总结:

  • 当程序中遇到异常时,通常程序会出现崩溃情况,为了不让程序崩溃,我们使用try except来处理

捕获多个异常

示例:

# 创建一个列表
list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
# 创建一个列表
dict1 = {}
# 建议在try中只写一行代码

try:
    print(list1[9])  # IndexError
    print(dict1['key1'])  # KeyError
except (IndexError, KeyError) as e:
    # e此时就是异常信息
    print(f"发生了{e}的异常")

总结:

  • 当捕获多个异常时,可以将多个异常使用元组形式存入

捕获所有异常

示例:

# 创建一个列表
data = [1, 2, 3, 4, 5, 6, 7, 8]
# 创建一个字典
dict1 = {}
# 建议在try中只写一行代码
try:
    # print(data[3] / 0)  # IndexError
    print(dict1['key1'])  # KeyError
except Exception as e:
    # e此时就是异常信息
    print(f"发生了{e}的异常")

总结:

  • 在捕获异常的三种方式中,捕获所有异常方式是最简洁高效

  • 在实际开发中,推荐使用捕获所有异常来处理所有有可能发生异常的代码

异常其它关键字

示例:

# 创建一个列表
data = [1, 2, 3, 4, 5, 6, 7, 8]
# 创建一个字典
dict1 = {}
try:
    print(data[5])
except IndexError as e:
    print(f"发生了异常:{e}")
else:
    print("程序正常运行")
finally:
    print("无论有没有异常都会执行")

总结:

  • 关键字else:表示当程序不发生异常时要执行的代码

  • 关键字finally:表示程序无论发不发生异常时都会执行的代码,可以用于一些必须要完成的操作,比如关闭文件、关闭系统资源等操作

异常具有传递性

示例:

# 定义一个列表
list1 = [1, 2, 3, 4, 5]

# 定义函数func1
def func1():
    print("这是func1开始---------------")
    # try:
    #     print(list1[3] + '4')
    # except TypeError as e:
    #     print(f"在func1中发生了异常,异常信息为:{e}")
    print(list1[3] + '4')
    print("这是func1结束---------------")

# 定义函数func2
def func2():
    print("这是func2开始---------------")
    func1()
    print("这是func2结束---------------")

if __name__ == '__main__':
    try:
        func2()
    except Exception as e:
        print(f"在main函数中发生了异常,异常信息为:{e}")

总结:

  • 当一段代码可能会发生异常时,我们需要进行异常的捕获,当代码之间有嵌套时,异常会从里向外传递

  • 如果我们在最外层代码进行异常捕获,可以捕获到所有的代码异常,一般用Exception

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值