脱离苦海,从避免滥用try...except...开始

  发布时间:2025-11-05 15:23:12   作者:玩站小弟   我要评论
有不少人在写 Python 代码时,喜欢用 try...except Exception,更有甚者一层套一层,不管有没有用,先套了再说:ss="dp-xml">ss="alt">deffu 。

有不少人在写 Python 代码时,脱离苦海喜欢用 try...except Exception,从避更有甚者一层套一层,免滥不管有没有用,开始先套了再说:

ss="dp-xml">ss="alt">def func(): ss="">    try: ss="alt">        "函数内部代码" ss="">    except Exception as e: ss="alt">        print(函数错误:,脱离苦海 e) ss=""> ss="alt"> ss="">try: ss="alt">    func() ss="">except Exception as e: ss="alt">    print(函数错误:, e) 

根本不管是否有必要,总之套上了try...except...就有了安全感。从避

俄罗斯套娃套多了以后,免滥噩梦开始了。开始我们来看看下面这段报错:

你倒是脱离苦海给我说说,是从避哪个函数出了问题?

如果你饱受滥用try...except...之苦,下面三个方法可以让你脱离苦海。免滥

把问题暴露出来

在程序开发的开始初期,不要用try...except...。脱离苦海让 Python 把问题暴露出来。从避通过 Python 的免滥报错,你可以直接看到是哪一行代码有问题,具体是什么问题。

甚至有时候,不仅不需要捕获异常,你还应该主动抛出异常。在项目完成以后,如果你做的是一个第三方库,是用来给别人调用的,免费源码下载那么,你应该多抛出异常,而不是擅自返回一个普通的错误信息。

例如,你要实现一个函数:query_name,传入参数是数字 id,输出用户名。你可能会这样写:

ss="dp-xml">ss="alt">def query_name(user_id): ss="">    if not isinstance(user_id, int): ss="alt">        return {success: False, msg: 用户 id 必须是整型} ss="">    ... 

但实际上,更好的做法是,直接抛出一个异常:

ss="dp-xml">ss="alt">def query_name(user_id): ss="">    if not isinstance(user_id, int): ss="alt">        raise Exception(用户 id 必须是整型} ss="">    ... 

甚至在某些情况下,你可以使用 Python 的断言:

ss="dp-xml">ss="alt">def query_name(user_id): ss="">    assert isinstance(user_id, int), 用户 id 必须是整型 ss="alt">    ... 

如下图所示:

只要 user_id不是整型,就抛出AssertionError。

我们直接执行python3 xxx.py时,这些断言语句会正常工作。但我们可以通过python3 -o xxx.py来让所有assert xxx语句失效。

尽量早地让异常暴露出来,才能更早地解决问题。

捕获具体异常而不是所有异常

只捕获你明确知道的异常。这些异常你知道它为什么会出现,并且你知道应该怎么解决它。

例如,云南idc服务商我们使用requests请求网站,由于网络问题,有时候可能会请求超时。一旦超时 requests 就会抛出超时异常,如下图所示:

这种情况下,你知道这个地方可能会出现Timeout异常,并且你知道出现的时候,重试就可以了。于是,你可以捕获这个异常:

大家注意,在这个地方,requests 执行了.json()方法。如果URL 返回的内容可能不是 JSON 格式的字符串,这里就会报JSONDecodeError,如下图所示:

如果你不做区分,一股脑直接用 except Exception,那么你怎么知道,到底是你能够正常处理的超时问题,还是你不能正常处理的网站内容返回异常?

所以,只捕获你知道它为什么会发生并且你知道如何处理的异常。对于你无法预料的或者无法处理的异常,亿华云直接抛出。不要擅自捕获。

强行打印报错信息

如果实在是万不得已,你必须用try...except Exception,如何把具体报错的位置打印出来呢?其实也是有方法的。那就是使用 Python 自带的traceback模块。

它的用法非常简单:

ss="dp-xml">ss="alt">import traceback ss=""> ss="alt">try: ss="">    1 + a ss="alt">except Exception: ss="">    print(traceback.format_exc()) 

运行效果如下图所示:

成功把异常所在的行数和具体的错误类型打印了出来。显然,这样写你需要平白无故多写很多代码。

总结try...except...会让你的代码看起来没有问题,但也有可能会掩盖问题,让你无法发现哪里有问题。所以,从看了这篇文章开始,删除不必要的try...except...。

拥抱异常,让你无法处理的异常抛出来。程序出现了问题应该停止运行,而不是带着问题继续运行,这样可能会演变成更大的问题。

  • Tag:

相关文章

  • 电脑绣花人工贴板教程(利用电脑绣花人工贴板,为刺绣艺术赋予全新的可能性)

    摘要:在刺绣艺术领域,传统的手工绣花技艺在现代社会中依然保留着独特的魅力。然而,随着科技的进步,电脑绣花人工贴板的出现为刺绣师们提供了全新的可能性。这项技术将传统手工与现代科技相结合,使...
    2025-11-05
  • 以秒变文档(提升写作效率,实现智能化创作)

    摘要:在数字化时代,人们的写作需求日益增长,传统的纸笔写作方式已经无法满足现代社会的要求。然而,随着科技的发展,以秒变文档为代表的数字化工具应运而生,通过其智能化的功能和便捷性,极大地提...
    2025-11-05
  • 摩擦交友(摩擦交友)

    摘要:随着社交媒体的兴起,人们的社交方式也在不断发展。其中,以摩擦交友为主题的社交平台备受年轻人的欢迎。摩擦交友是一种基于共同兴趣爱好的社交方式,它通过提供一个平台,让人们能够相互了解、...
    2025-11-05
  • 美兹闪光灯(探索美兹闪光灯的功能和优势,提升你的摄影体验)

    摘要:作为摄影爱好者,拥有一款高质量的闪光灯是非常重要的。在众多品牌中,美兹闪光灯以其出色的功能和性能脱颖而出。本文将深入探索美兹闪光灯的特点和优势,并展示它如何提升你的摄影体验。...
    2025-11-05
  • Mate9(Mate9的耐摔性能及用户体验)

    摘要:在如今的移动通信时代,智能手机已经成为人们生活中不可或缺的一部分。然而,随着手机的功能越来越强大,其脆弱性也逐渐暴露出来。用户对于手机的耐摔性能要求越来越高。本文将以华为Mate9...
    2025-11-05
  • 探索2000dpi鼠标的性能和优势(高灵敏度鼠标带来的畅快体验)

    摘要:随着科技的不断发展,电脑和笔记本已经成为我们日常生活的重要工具。而作为电脑操作的重要工具之一,鼠标的性能也变得越来越重要。在众多鼠标种类中,2000dpi鼠标以其出色的性能和优势逐...
    2025-11-05

最新评论