20个改善编码的Python异常处理技巧,让你的代码更高效

20个非常有用的Python单行代码 在本文中,小编将分享20 个 Python 一行代码,你可以在 30 秒或更短的时间内轻松学习它们。这种单行代码将节省你的时间,并使你的代码看起来更干净且易于阅读。 阅读详情

异常处理是写好代码的一个重要的方面,虽然许多开发人员都熟悉基本的try-except块,但是有很多更深入的知识可以使异常处理更高效、更可读和更python化。所以本文将介绍关于Python异常的20个可以显著改善编码的Python异常处理技巧,这些技巧可以让你熟练的掌握Python的异常处理。

Python中的异常是在程序执行期间发生的破坏了程序指令的正常流程的事件。与其他编程语言一样,Python使用异常来代表错误发生的信号,程序可以做出反应,并恢复或通知用户产生的问题。

1、最简单的异常处理

我们都知道最简单的异常处理如下:

 try:
    # Your code here
 except IOError:
    # Handle I/O errors
 except Exception as e:
    # Handle other exceptions
 finally:
    # Cleanup, runs no matter what

异常是按层次结构组织的,如果发生了IOError会执行IOError的except代码,剩下的异常则交由Exception处理。理解这个层次结构可以根据需要更广泛或更具体地捕获错误。

在这里插入图片描述

使用finally子句确保执行清理操作,而不管是否发生异常。它非常适合关闭文件或释放资源。

2、自定义异常

创建自定义异常可以使代码更具可读性和可维护性,可以清楚地表示特定的错误条件。

 class MyCustomError(Exception):
    pass
 
 try:
    raise MyCustomError("A specific error occurred")
 except MyCustomError as e:
    print(e)

3、Else in Try-Except

如果没有引发异常,则try-except块中的else子句将运行。这是其他语言没有的

 try:
    # Attempt operation
 except Exception:
    # Handle error
 else:
    # Executes if no exceptions

4、AS关键字

在捕获异常时,可以使用as关键字将异常分配给一个变量,这样可以显示详细信息并使调试更容易。

 try:
    # Some operation
 except Exception as e:
    print(f"Error: {e}")

5、捕获多个异常

元组可用于在一行中捕获多种异常类型,从而简化错误处理代码。

 try:
    # Risky operation
 except (TypeError, ValueError) as e:
    # Handle both exceptions

6、异常触发另外的异常

Python允许在使用from保持原始回溯的同时触发新的异常,从而帮助调试复杂的场景。

 try:
    # Some operation
 except Exception as original_error:
    raise RuntimeError("Something bad happened") from original_error

这种方法有好有坏,所以如果不熟悉的话建议还是不要用。

7、忽略异常

使用contextlib.suppress()函数,可以优雅地忽略特定的异常,从而使代码更清晰、更易读。

 from contextlib import suppress
 
 with suppress(FileNotFoundError):
    # Operation that might not find a file

8、使用断言

如果不满足条件,可以使用断言抛出异常。但是要谨慎使用它们,因为它们可以通过执行时的优化标志被禁用。

 assert condition, "Condition was not met"

assert 断言会抛出AssertionError,可以在except中直接捕获

9、格式化异常信息

利用Traceback模块打印详细的异常信息,这样可以显示完整的错误来帮助调试。

 import traceback
 
 try:
    raise ValueError("An error occurred")
 except:
    traceback.print_exc() # Print exception information to stderr

10、使用warnings模块发出非致命警报

warnings模块发出是警告而不是异常。如果希望在不停止程序执行的情况下提醒用户或开发人员潜在问题时,它非常有用。

 import warnings
 
 warnings.warn("This is a warning message", UserWarning)

11、忽略异常

suppress函数被用来忽略特定的异常。contextlib可以确保资源在使用后得到适当的清理。

 from contextlManaging Resources: Illustrates creating context managers for resource management, ensuring resources are properly cleaned up after use. The suppress function is shown to ignore specific exceptions.ib import contextmanager, suppress
 
 @contextmanager
 def managed_resource():
    try:
        resource = "Resource"
        yield resource
    finally:
        print("Resource cleanup")
 
 with managed_resource() as res:
    print(res)
 
 with suppress(FileNotFoundError):
    open('non_existent_file.txt', 'r') # Suppresses the FileNotFoundError

12、创建处理异常的包装器函数

functools模块可以创建一个装饰器来包装用于集中异常处理的函数,从而简化跨多个函数的错误管理。

 from functools import wraps
 
 def exception_handler(func):
    @wraps(func)
    def wrapper(*args, **kwargs):
        try:
            return func(*args, **kwargs)
        except Exception as e:
            print(f"Handled exception: {e}")
            return None
    return wrapper
 
 @exception_handler
 def risky_function():
    raise ValueError("Something went wrong")
 
 risky_function()

13、访问异常相关的属性和函数

使用sys.exc_info()可以获取有关当前异常的详细信息,这对于进一步记录或处理错误细节很有用。

 import sys
 
 try:
    raise TypeError("An error occurred")
 except:
    exc_type, exc_value, exc_traceback = sys.exc_info()
    print(exc_type, exc_value)

14、分析当前异常上下文

利用inspect模块分析当前异常上下文,这对于复杂的错误处理场景特别有用。

 import inspect
 
 def current_exception():
    for frame in inspect.trace():
        if frame[3] == 'risky_function':
            return frame[0].f_locals.get('e')
 
 try:
    risky_function()
 except Exception as e:
    print(current_exception())

15、创建动态异常类

types模块可以动态创建异常类。这对于基于运行时条件动态生成自定义异常非常有用。

 import types
 
 DynamicException = types.new_class('DynamicException', (Exception,))
 raise DynamicException("A dynamically created exception")

16、访问所有内置异常

builtins可以列出Python中可用的所有内置异常,帮助我们了解层次结构和各种异常。

 import builtins
 
 for name in dir(builtins):
    obj = getattr(builtins, name)
    if isinstance(obj, type) and issubclass(obj, BaseException):
        print(name)

17、自定义异常的字符串表示形式

可以通过覆盖__str__和__repr__方法来演示自定义异常,获得更多信息丰富的错误消息。

 class MyException(Exception):
    def __str__(self):
        return "This is a custom message for MyException"
 
    def __repr__(self):
        return "MyException()"
 
 raise MyException

18、创建不被except Exception捕获的异常

常规except的Exception块会捕获从BaseException派生的异常,比如非常严重的错误我们可以派生字BaseException。

 class MyCriticalError(BaseException):
    pass
 
 try:
    raise MyCriticalError("A critical error")
 except Exception as e:
    print("This will not catch MyCriticalError")

19、优雅的处理用户和系统中断

捕获KeyboardInterrupt和SystemExit异常,以优雅地处理用户或系统启动的关机。

 import sys
 
 try:
    while True:
        continue
 except KeyboardInterrupt:
    print("User interrupted the process")
    sys.exit(0)

20、生成器的资源回收

GeneratorExit表示生成器执行时产生了异常,捕获它可以在关闭生成器时进行清理操作。

 def my_generator():
    try:
        yield "Hello"
    except GeneratorExit:
        print("Generator closing")
        raise
 
 gen = my_generator()
 next(gen)
 gen.close()

总结

Python异常可以极大地增强代码的健壮性和清晰度。本文整理的20个异常处理代码示例可以帮助你充分利用Python的错误处理能力,显著改善代码的异常处理能

关于Python学习指南

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、自动化办公等学习教程。带你从零基础系统性的学好Python!

👉Python所有方向的学习路线👈

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。(全套教程文末领取)

在这里插入图片描述

👉Python学习视频600合集👈

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

在这里插入图片描述

温馨提示:篇幅有限,已打包文件夹,获取方式在:文末

👉Python70个实战练手案例&源码👈

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

在这里插入图片描述

👉Python大厂面试资料👈

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

在这里插入图片描述

在这里插入图片描述

👉Python副业兼职路线&方法👈

学好 Python 不论是就业还是做副业赚钱都不错,但要学会兼职接单还是要有一个学习规划。

在这里插入图片描述

👉 这份完整版的Python全套学习资料已经上传,朋友们如果需要可以扫描下方优快云官方认证二维码或者点击链接免费领取【保证100%免费】

力。

网易 广州 梦幻西游端游 客户端社招笔试题 2024 4道算法题,时间2小时,牛客网笔试注:采用OJ模式,需要自己处理输入、输出。 阅读详情

相关推荐

对称加密中GCM和CBC俩种加密模式的区别

**CBC(Cipher Block Chaining)** 和 **GCM(Galois/Counter Mode)** 是两种常见的对称加密模式。它们的主要区别体现在加密方式、性能和安全性上。

闲人 1107

Python程序异常处理

异常就是程序运行时发生错误的信号,在程序由于某些原因出现错误的时候,若程序没有处理它,则会抛出异常,程序也的运行也会随之终止;1.程序终止,无法运行下去;2…如果程序是面向客户,那么会使客户的体验感很差,进而影响业务;当处理不确定因素时,比如有用户参与,有外界数据传入时,都容易出现异常;1.由于语法错误导致程序出现异常,这种错误,根本过不了Python解释器的语法检查,必须在程序执行前就改正;

Python编程学习的博客 6457

远程桌面项目

远程桌面项目

weixin_41560737的博客 1933

Python中的异常处理

Python中的异常处理

qq_44954371的博客 4666

从零到一:RV1126与IMX415的硬件交响曲——深入解析Linux IPC摄像头的硬件调试艺术

本文深入解析了RV1126与IMX415组合的Linux IPC摄像头硬件调试技术,涵盖硬件接口检查、设备树配置、驱动加载验证及ISP调优等关键步骤。通过详细的操作指南和常见问题解决方案,帮助开发者快速掌握摄像头调试技巧,提升开发效率。

weixin_29161785的博客 977

一起玩儿物联网人工智能小车(ESP32)——48. 利用循迹模块实现循迹小车(三)

摘要:本文介绍循迹小车的接线方法及类的基础知识

一起玩儿科技 1134

Python 中的异常处理

程序读文件内容的过程可能会发生错误,例如:要读取的文件不存在。传统的错误处理方式如下:某个函数 f 在运行过程中可能会发生错误;函数 f 发生错误时,函数 f 返回错误代码;在调用函数 f 的地方,需要检查 f 的返回值是否有错。1. 传统的错误处理方式1.1 返回错误码例如,在 C 语言中,函数 open 用于打开一个文...

weixin_26808963的博客 287

RTC温度补偿:如何让时间分秒不差?

RTC(实时时钟)温度补偿技术通过"检测温度→计算误差→动态调整频率"的闭环机制,解决振荡器频率随温度变化导致的时间误差问题。核心步骤包括:1)高精度温度检测;2)基于温度-频率误差模型计算偏差;3)通过硬件(可编程电容/DAC)或软件方式调整振荡频率。该技术需突破温度检测精度、误差模型拟合、频率调整分辨率等关键点,根据不同应用场景(消费电子±5ppm至军工±0.1ppm)选择匹配方案。典型实现如STM32的分段线性补偿算法,可将工业级RTC精度提升至±2ppm以内。

上市公司前技术负责人,20 年软硬件深耕 + 百人研发团队管理经验,名校理工科背景加持。从技术攻坚到团队掌舵,沉淀海量项目实战与管理心得,专注分享软硬件干货、疑难问题解决方案,既是靠谱知识传播者,也盼链接优质项目共成长。 1229

Python——异常处理

讲述了Python异常处理机制、内置异常类的结构、异常处理的语法结构、异常的检测与处理方法、自定义异常类的定义与使用方法、with语句与断言的使用方法。

m0_65639340的博客 1万+

手把手教你用VMware虚拟机搭建PCAN开发环境:从Ubuntu安装到CAN通讯实战

本文详细指导如何在VMware虚拟机中搭建PCAN开发环境,涵盖从Ubuntu系统安装、VMware精细配置、PCAN-USB设备直通,到Linux驱动编译、can-utils工具集使用及完整CAN通讯测试的全过程。通过实战步骤与故障排查技巧,帮助开发者快速构建稳定高效的CAN总线开发与测试沙盒,特别适合车载诊断与嵌入式通讯应用。

weixin_29216353的博客 221

走马观碑组智能车竞赛:目标板识别算法优化与实战技巧(基于OpenCV)

本文针对智能车竞赛走马观碑组别的核心挑战,深入探讨了基于OpenCV的目标板识别算法优化与实战技巧。文章系统分析了PVC赛道环境下的光照、运动模糊等干扰因素,详细拆解了从红色矩形定位、透视校正到特征提取与分类的完整流程,并提供了工程优化、速度提升及现场调试的实用策略,旨在帮助参赛队伍构建一套在高速运动中既准又快的鲁棒识别系统。

life6的博客 732

【宝藏系列】20个常用的Python技巧

【宝藏系列】20个常用的Python技巧

ws15168689087的博客 1万+

语音信号的AGC自适应增益调整matlab仿真

语音信号的自动增益控制(Automatic Gain Control,AGC)是音频处理领域中的一项重要技术。其核心功能是实时调整输入信号的幅度,使其保持在一定范围内,以优化输出信号的质量。AGC广泛应用于语音通信、语音识别、音频录制和播放等领域,旨在解决输入信号幅度波动问题,确保输出信号的稳定性和清晰度。一、AGC的基本原理1.1 幅度调整自动增益控制的基本原理是根据输入信号的幅度动态地调整系统的增益。

平时工作较为繁忙,私信消息一般晚上回复,谢谢大家~~ 918

20个Python读写文件的高效技巧

在Python中,高效地读写文件是数据处理和自动化任务中不可或缺的一部分。

Python_00001的博客 839

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

20个高效的Python单行代码

20个高效Python 单行代码片段,只需一行代码即可解决特定编码问题!

2401_85537399的博客 617

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Python文件操作和异常处理:高效处理数据的利器

Python是一种强大而灵活的编程语言,它提供了许多功能强大的工具和库,用于处理各种数据类型。在数据处理中,文件操作和异常处理是非常重要的方面。本文将介绍Python中的文件操作和异常处理,探讨如何使用它们来高效地处理数据。我们将深入了解Python中的文件操作。文件是存储和读取数据的主要方式之一,在数据处理过程中起着至关重要的作用。我们将学习如何打开、读取、写入和关闭文件,以及如何处理常见的文件操作任务,如逐行读取和按行写入,将介绍如何处理不同类型的文件,如文本文件、CSV文件和JSON文件等。

忆~遂愿的博客 3191

15个提升Python的编码技巧,从此键盘飞起

通过使用这些技巧和建议,可以大大提高Python编程的效率和质量。不断学习和实践这些技能,让Python之旅更加愉快和成功。无论是初学者还是经验丰富的Python开发者,这些技巧都将有助于不断提升自己的编程水平。

涛哥聊Python 1169
上一篇: 如何激怒一位Python爱好者?
下一篇: Python编程的终极十大工具
我爱学大模型
博客等级 码龄3年 7883粉丝 687原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值