一日一技:不使用 try...except 掩盖一些已知异常

简介: 一日一技:不使用 try...except 掩盖一些已知异常

摄影:产品经理下厨:kingname产品经理的母上送的大闸蟹

在我们写代码的过程中,可能会遇到很多很多的异常,其中有一些异常,我们知道它无关紧要,可以忽略,那么我们的代码可能会这样写:

nums = [1, 2, 3, '4', 5, 6]
for num in nums:
    try:
        print(num + 1)
    except TypeError:
        pass

在这段代码中,需要让列表nums中的每一个元素加1并打印结果。但其中有一个元素是字符串,字符串与数字相加会抛出TypeError。如果我们想直接忽略它,那么就可以像上面这样写代码。

但是,可能会有人觉得用了try...except以后代码不整齐,不美观。

为了让代码美观起来,我们可以使用contextlib模块中的suppress

它的使用非常简单:

from contextlib import suppress
nums = [1, 2, 3, '4', 5, 6]
for num in nums:
    with suppress(TypeError):
        print(num + 1)

只要在 suppress上下文的缩进中发生的TypeError,都会被自动忽略。

运行效果如下图所示:

需要注意的是,你不能把 for 循环放在supress的缩进里面,否则会导致报错位置之后的循环无法被执行,如下图所示:

目录
相关文章
|
2月前
|
安全 程序员 编译器
【C++】异常
C++异常处理机制允许在程序运行时出现错误时,通过`try`、`catch`和`throw`关键字将错误信息传递回调用栈,进行异常处理。它支持异常的重新抛出、自定义异常体系以及标准库提供的异常类层次结构,如`std::exception`及其派生类。异常处理提高了代码的健壮性和可维护性,但也带来了性能开销和代码复杂性等问题。合理使用异常机制,可以有效提升程序的稳定性和安全性。
68 3
|
2月前
|
Java 应用服务中间件 测试技术
NoInitialContextException 异常通常会在哪些场景下出现
NoInitialContextException 异常通常在尝试使用 JNDI(Java 命名和目录接口)进行资源查找时,因缺少必要的环境配置或初始化上下文未正确设置而出现。常见于 Java EE 应用中。
74 5
|
运维 编译器 C语言
异常(C++)
异常(C++)
79 1
|
8月前
|
Java 程序员 数据库连接
|
8月前
|
安全 Java 编译器
异常的讲解
异常的讲解
55 1
|
8月前
|
程序员 编译器 Shell
C++『异常』
C++『异常』
77 0
|
存储 监控 Java
认识异常【超详细】
认识异常【超详细】
52 0
|
Java 程序员 测试技术
C++11 异常(下)
C++11 异常(下)
69 0
|
安全 程序员 C语言
|
程序员 编译器 C语言
【C++】异常,你了解了吗?(一)
在之前的C语言处理错误时,会通过assert和错误码的方式来解决,这导致了发生错误就会直接把程序关闭,或者当调用链较长时,就会一层一层的去确定错误码,降低效率,所以c++针对处理错误,出现了异常,一起来学习!
132 0

热门文章

最新文章