Python入门——异常处理

本文深入探讨Python中常见的异常类型,如ZeroDivisionError、FileNotFoundError等,并详细讲解如何使用try_except、try_except_else及try_except_finally进行有效的异常处理,提升程序稳定性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一部分 常见异常的产生

1.1 除0运算——ZeroDivisionError

1.2 找不到可读文件——FileNotFoundError

1.3 值错误——ValueError

  • 传入一个调用者不期望的值,即使这个值的类型是正确的
s = "1.3"
n = int(s)    # int()只能传入整型,此处传入了浮点型

1.4 索引错误——IndexError

  • 下标超出序列边界
ls = [1, 2, 3]
ls[5]

1.5 类型错误——TypeError

  • 传入对象类型与要求不符
1 + "3"    # 只能是字符串与字符串相加 或者数字与数字相加,不能混用

1.6 使用一个未被定义的变量——NameError

1.7 试图访问字典里不存在的键——KeyError

第二部分 异常的处理

  • 当异常发生的时候,如果不预先设定处理方法,程序就会中断
  • 异常的处理,可以使异常发生时,程序不中断,提高程序的稳定性和可靠性

2.1 try_except

  • 如果try内代码块顺利执行,except不被触发
  • 如果try内代码块发生错误,触发except,执行except内代码块

2.1.1 单分支

x = 10
y = 0
try:
    z = x/y
except ZeroDivisionError:                  # 一般来说会预判到出现什么错误
    z = x/(y+1e-7)    # 可以把除数变为一个无限接近0的数
    print(z)
    print("0不可以被除!")    
100000000.0
0不可以被除!
x = 10
y = 0
try:
    z = x/y
except NameError:                  # 预判错误,程序会被中断报错
    z = x/(y+1e-7)
    print(z)
    print("0不可以被除!")   

2.1.2 多分支

ls = []
d = {"name": "大杰仔"}
try:
    y = m
    # ls[3]
    # d["age"]
except NameError:
    print("变量名不存在")
except IndexError:
    print("索引超出界限")
except KeyError:
    print("键不存在")
变量名不存在

2.1.3 万能异常 Exception——所有错误的老祖宗

ls = []
d = {"name": "大杰仔"}
try:
    # y = m
    ls[3]
    # d["age"]
except Exception:
    print("出错啦")
出错啦

2.1.4 捕获异常的值 as——虽不能获得错误具体类型,但可以获得错误的值

ls = []
d = {"name": "大杰仔"}
try:
    y = m
    # ls[3]
    # d["age"]
except Exception as e:
    print(e)
name 'm' is not defined

2.2 try_except_else

  • 如果try模块正确执行,则else模块执行
try:
    with open("浪淘沙_北戴河.txt") as f:
        text = f.read()
except FileNotFoundError:
    print("找不到该文件,ta是不是用了美颜?")
else:
    for s in ["\n", ",", "。", "?"]:         # 去掉换行符和标点符号
        text = text.replace(s, "")
    print("《浪淘沙_北戴河》共由{}个字组成。".format(len(text)))
《浪淘沙_北戴河》共由65个字组成。

2.3 try_except_finally

  • 不论try模块是否正确执行,finally最后都执行
ls = []
d = {"name": "大杰仔"}
try:
    y = m
    # ls[3]
    # d["age"]
except Exception as e:
    print(e)
finally:
    print("不论触不触发异常,都将执行")
name 'm' is not defined
不论触不触发异常,都将执行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值