当前位置:首页 > 科技  > 软件

Python 异常处理的十个实用策略

来源: 责编: 时间:2024-05-23 17:12:14 264观看
导读今天我们要聊聊Python里的那些“意外”事儿——异常处理!别担心,学会了这些策略,你的代码就能稳如老狗,即便遇到坑也能优雅地跳过去。1. 异常处理基础:Try-Except的温暖拥抱想象一下,你正开心地读取一个文件,突然“啪”,文件

今天我们要聊聊Python里的那些“意外”事儿——异常处理!别担心,学会了这些策略,你的代码就能稳如老狗,即便遇到坑也能优雅地跳过去。YSh28资讯网——每日最新资讯28at.com

YSh28资讯网——每日最新资讯28at.com

1. 异常处理基础:Try-Except的温暖拥抱

想象一下,你正开心地读取一个文件,突然“啪”,文件不存在!这时候,就需要try-except来救场了。YSh28资讯网——每日最新资讯28at.com

try:    with open("不存在的文件.txt", 'r') as file:        content = file.read()        print(content)except FileNotFoundError:    print("哎呀,文件没找到呢!")

这段代码的意思是:“嘿,Python,试试看打开这个文件,如果不行(遇到FileNotFoundError),就执行下面的安慰话。”YSh28资讯网——每日最新资讯28at.com

2. 多重异常:一网打尽

有时候,不是只有单一的问题,这时候我们可以用一个except捕获多个异常。YSh28资讯网——每日最新资讯28at.com

try:    # 假设这里可能抛出多种异常    result = 10 / 0    print(result)except (ZeroDivisionError, TypeError) as e:    print(f"出错了,原因可能是:{e}")

这里我们同时看着零除错误和类型错误,就像带着多层防护网。YSh28资讯网——每日最新资讯28at.com

3. 捕获所有异常:最终防线

当你不确定会遇到什么异常,可以使用Exception来捕获所有非系统退出异常。YSh28资讯网——每日最新资讯28at.com

try:    # 可能引发任何异常的操作    eval(input("输入一些危险的代码吧:"))except Exception as e:    print(f"安全第一,阻止了不安全的操作:{e}")

但要小心,别滥用,否则错误信息可能会变得难以追踪哦!YSh28资讯网——每日最新资讯28at.com

4. 细粒度异常处理:精准打击

对于复杂的程序,精确捕获特定异常更有利于问题定位。YSh28资讯网——每日最新资讯28at.com

try:    number = int(input("请输入一个数字:"))    print(10 / number)except ValueError:    print("输入的不是数字哦!")except ZeroDivisionError:    print("不能除以零!")

这样,用户得到的反馈更加具体,而不是笼统的错误信息。YSh28资讯网——每日最新资讯28at.com

5. 异常链:追踪错误的来龙去脉

当一个异常触发另一个异常时,保持原始异常信息很重要。YSh28资讯网——每日最新资讯28at.com

try:    raise ValueError("起始错误")except ValueError as ve:    try:        raise ZeroDivisionError("由上一个错误引发")    except ZeroDivisionError as zde:        print("发生了两个错误!原始错误是:", ve)        raise zde from ve  # 保留错误链

这样,你可以知道错误是如何一层层传递的。YSh28资讯网——每日最新资讯28at.com

6. 使用else和finally:打扫战场

YSh28资讯网——每日最新资讯28at.com

else:在没有异常发生时执行。YSh28资讯网——每日最新资讯28at.com

finally:无论是否发生异常都会执行,非常适合资源清理。YSh28资讯网——每日最新资讯28at.com

try:    # 尝试执行的代码    x = 5except ValueError:    print("处理异常")else:    print("一切顺利,x =", x)finally:    print("不管怎样,我都要执行清理工作")

7. 自定义异常:个性化的错误信号

有时候,Python自带的异常不够用,我们就可以DIY啦!YSh28资讯网——每日最新资讯28at.com

class CustomError(Exception):    def __init__(self, message):        self.message = messagetry:    raise CustomError("这是我的自定义错误!")except CustomError as ce:    print(ce.message)

这样,你的程序就有了自己的语言!YSh28资讯网——每日最新资讯28at.com

8. with语句的异常处理:资源管理小能手

用with不仅可以自动管理资源,还能优雅地处理异常。YSh28资讯网——每日最新资讯28at.com

with open("test.txt", 'w') as file:    try:        file.write("你好,世界!")        file.non_existent_method()  # 假设这里有一个不存在的方法    except AttributeError:        print("文件操作出了点小状况")

即使内部有错误,文件也会被正确关闭。YSh28资讯网——每日最新资讯28at.com

9. 避免空的except:不要吃掉错误哦

try:    # 可能出错的代码except:    pass  # 不推荐这样做!

这样做会隐藏错误,让调试变成一场噩梦。记得总是指定你想要捕获的异常类型。YSh28资讯网——每日最新资讯28at.com

10. 异常作为流程控制:巧妙的决策树

虽然不常见,但在某些情况下,利用异常来改变程序流也是可以的,但要谨慎使用。YSh28资讯网——每日最新资讯28at.com

def find_item(items, target):    for item in items:        if item == target:            return item    raise StopIteration(f"{target} not found")try:    print(find_item([1, 2, 3], 4))except StopIteration as si:    print(si)

这里我们用StopIteration来表示查找失败,当然,一般我们会选择返回None或使用其他逻辑。YSh28资讯网——每日最新资讯28at.com

好啦,以上就是Python异常处理的十大策略,希望它们能让你的代码之旅更加平稳愉快。YSh28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-90344-0.htmlPython 异常处理的十个实用策略

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 优秀 C# 通信框架推荐及介绍

下一篇: 比较 kube-proxy 模式:iptables 还是 IPVS?

标签:
  • 热门焦点
  • 7月安卓手机好评榜:三星S23Ultra好评率第一

    性能榜和性价比榜之后,我们来看最后的安卓手机好评榜,数据来源安兔兔评测,收集时间2023年7月1日至7月31日,仅限国内市场。第一名:三星Galaxy S23 Ultra好评率:95.71%在即将迎来新
  • 帅气纯真少年!日本最帅初中生选美冠军出炉

    日本第一帅哥初一生选美大赛冠军现已正式出炉,冠军是来自千叶县的宗田悠良。日本一直热衷于各种选美大赛,从“最美JK”起到“最美女星&r
  • iPhone卖不动了!苹果股价创年内最大日跌幅:市值一夜蒸发万亿元

    8月5日消息,今天凌晨美股三大指数高开低走集体收跌,道指跌0.41%;纳指跌0.36%;标普500指数跌0.52%。热门科技股也都变化极大,其中苹果报181.99美元,跌4.8%,创
  • 十个简单但很有用的Python装饰器

    装饰器(Decorators)是Python中一种强大而灵活的功能,用于修改或增强函数或类的行为。装饰器本质上是一个函数,它接受另一个函数或类作为参数,并返回一个新的函数或类。它们通常用
  • 让我们一起聊聊文件的操作

    文件【1】文件是什么?文件是保存数据的地方,是数据源的一种,比如大家经常使用的word文档、txt文件、excel文件、jpg文件...都是文件。文件最主要的作用就是保存数据,它既可以保
  • 多线程开发带来的问题与解决方法

    使用多线程主要会带来以下几个问题:(一)线程安全问题  线程安全问题指的是在某一线程从开始访问到结束访问某一数据期间,该数据被其他的线程所修改,那么对于当前线程而言,该线程
  • 拼多多APP上线本地生活入口,群雄逐鹿万亿市场

    Tech星球(微信ID:tech618)文 | 陈桥辉 Tech星球独家获悉,拼多多在其APP内上线了“本地生活”入口,位置较深,位于首页的“充值中心”内,目前主要售卖美食相关的
  • 英特尔Xe HPG游戏显卡:拥有512EU,单风扇版本

    据10 月 30 日外媒 TheVerge 消息报道,英特尔 Xe HPG Arc Alchemist 的正面实被曝光,不仅拥有 512 EU 版显卡,还拥有 128EU 的单风扇版本。另外,这款显卡 PCB
  • 上海举办人工智能大会活动,建设人工智能新高地

    人工智能大会在上海浦江两岸隆重拉开帷幕,人工智能新技术、新产品、新应用、新理念集中亮相。8月30日晚,作为大会的特色活动之一的上海人工智能发展盛典人工
Top