Python 异常处理深度解析:掌握健壮代码的关键

news2024/10/7 10:14:54

文章目录

      • 1. 异常处理的基础
        • 1.1 使用 `try` 和 `except`
        • 1.2 捕获多种异常
      • 2. 高级异常处理
        • 2.1 捕获所有异常
        • 2.2 使用 `else` 和 `finally`
      • 3. 异常链与自定义异常
        • 3.1 异常链
        • 3.2 自定义异常

有效管理和处理异常是构建健壮、可靠和用户友好应用程序的基石。异常处理不仅有助于防止程序意外崩溃,还能为用户提供更清晰的错误信息,帮助开发者诊断问题。本文将全面介绍 Python 中的异常处理机制,从基本的 try-except 结构到高级的异常管理技术,包括异常链和自定义异常,旨在帮助开发者精确掌控程序中的错误和异常。

1. 异常处理的基础

1.1 使用 tryexcept

Python中处理异常的基本方法是使用 tryexcept 语句。try 块让 Python 尝试执行一段代码,如果代码执行过程中发生异常,那么程序将停止执行 try 块余下的部分,并跳转到处理该异常的 except 块。

try:
    # 尝试执行的代码
    result = 10 / 0
except ZeroDivisionError:
    # 处理除以零的错误
    print("不能除以零!")

通过使用 tryexcept 结构,尝试执行一个除法操作。如果输入的是零,这将触发 ZeroDivisionError。异常被 except 块捕获,防止了程序的崩溃,并输出了一个错误消息。

1.2 捕获多种异常

一个 try 语句可以配备多个 except 块,用来捕获和处理不同类型的异常,这提高了代码的健壮性和可读性。

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

首先尝试将用户输入转换为整数,如果输入不是整数,将抛出 ValueError。如果输入为零,则在执行除法时抛出 ZeroDivisionError。每种异常类型都有其对应的 except 块来处理。

2. 高级异常处理

2.1 捕获所有异常

在某些情况下,可能想要捕获所有类型的异常,特别是在不确定可能遇到哪些异常时。可以使用 Exception 来捕获所有异常,这应该谨慎使用,以避免掩盖潜在的错误。

try:
    process_data()
except Exception as e:
    print(f"发生错误:{e}")

如果函数执行中抛出任何异常,都会被 except 块捕获。捕获后,打印出异常的详细信息。

2.2 使用 elsefinally

try 语句可以与 elsefinally 一起使用,以覆盖更多的情况。else 块指定了当没有异常被触发时执行的代码,而 finally 块指定了无论是否发生异常都会执行的代码,常用于清理资源,如关闭文件。

在这里插入图片描述
示例代码

try:
    result = 10 / int(input("请输入一个非零整数: "))
except ZeroDivisionError:
    print("不能除以零!")
else:
    print("结果是", result)
finally:
    print("操作已完成。")

try 块中,程序尝试获取用户输入并进行除法操作。如果输入导致了 ZeroDivisionError(如用户输入了0),则该异常会被 except 块捕获并处理。如果没有引发异常,else 块将执行,输出除法的结果。最后,不论是否发生异常,finally 块都会执行,通常用于执行必要的清理操作,如此例中的打印“操作已完成。

3. 异常链与自定义异常

3.1 异常链

异常链在 Python 中用于处理一个异常触发另一个异常的情况,这可以帮助开发者追踪问题的根源,特别是在复杂的系统中,错误可能是由多个不同层次的操作引发的。

try:
    # 模拟数据处理中可能遇到的输入输出异常
    process_data()
except IOError as e:
    # 当处理数据时发生输入输出错误,引发更高级别的异常
    raise RuntimeError("数据处理出错") from e

如果 process_data() 函数由于文件读写问题引发 IOError,不仅捕获这个异常,还将其作为 RuntimeError 的原因抛出。这样做的好处是,即使在高层代码中捕获了 RuntimeError,也能通过查看异常链来找到最初的 IOError,从而更容易地定位并解决问题。

3.2 自定义异常

自定义异常通常用于定义应用程序特有的错误条件,并可以为这些错误条件提供更具体的错误信息。自定义异常通过继承 Exception 类或其子类来创建。

class MyError(Exception):
    def __init__(self, message):
        super().__init__(message)

try:
    raise MyError("出现了一个错误!")
except MyError as e:
    print(e)

这段代码中定义了一个名为 MyError 的自定义异常类,继承自 Python 的 Exception 基类。通过 try 块,尝试抛出 MyError,使用的错误信息是 “出现了一个错误!”。当异常被抛出时,控制流转到 except 块,捕获此异常并通过 print(e) 打印错误信息,这展示了如何在 Python 中创建和管理自定义异常。


推荐: python 错误记录
参考:Exception & Error Handling in Python

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1607329.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

衣康酸(ITA)应用领域广泛 工业发酵法为其主流制备方法

衣康酸(ITA)应用领域广泛 工业发酵法为其主流制备方法 衣康酸(ITA)又称亚甲基丁二酸、甲叉琥珀酸,化学式为C5H6O4,是一种不饱和二元有机酸。衣康酸外观呈白色结晶粉末,含强烈刺激性气味&#xf…

Spring Boot 框架集成Knife4j

本次示例使用 Spring Boot 作为脚手架来快速集成 Knife4j,Spring Boot 版本2.3.5.RELEASE,Knife4j 版本2.0.7&#xff0c;完整代码可以去参考 knife4j-spring-boot-fast-demo pom.xml 完整文件代码如下 <?xml version"1.0" encoding"UTF-8"?> &l…

看现货白银平台测评要注意的几个事项

在网上我们会看到很多现货白银平台测评的文章或短视频&#xff0c;我们要注意&#xff0c;这些测评内容包括本文在内&#xff0c;多少都会存在着一些主观性的东西&#xff0c;这是无可避免的。不过在看现货白银平台测评时&#xff0c;有一些客观的东西&#xff0c;是需要我们留…

专注底层技术创新,超高性能公链新星 Sui Network 有何独特优势?

近年来&#xff0c;Sui Network 为了能够打造让开发者低成本实现广泛应用开发的公链环境付诸实际行动。其建立了以对象为中心的数据模型、在交易签名和 PTB 中实现精细化权限、优化用户友好功能&#xff0c;逐步为开发者和用户提供了一个更为灵活、安全的链上运行环境。在优越技…

【吊打面试官系列】Java高并发篇 -为什么使用 Executor 框架比使用应用创建和管理线程好?

大家好&#xff0c;我是锋哥。今天分享关于 【为什么使用 Executor 框架比使用应用创建和管理线程好&#xff1f;】面试题&#xff0c;希望对大家有帮助&#xff1b; 为什么使用 Executor 框架比使用应用创建和管理线程好&#xff1f; 为什么要使用 Executor 线程池框架 1、每…

springboot 载入自定义的yml文件转DTO

改进方法&#xff0c;直接spring注入 import cn.hutool.json.JSONUtil; import org.springframework.beans.factory.config.YamlMapFactoryBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import …

开抖音小店需要用到哪些软件?全部都给大家整理好了,快来看看!

哈喽~我是电商月月 在抖音小店的运营过程中&#xff0c;选品上架&#xff0c;售后客服都是要靠软件辅助进行的 那开抖音小店到底会用到哪些软件&#xff1f;这些平台都叫什么&#xff1f; 今天我就给大家介绍一下抖音小店运营过程中会使用到的软件&#xff0c;干货满满&…

图片/视频上传(超简单教程)

#应用场景# 该后端开发接口适用 图片/视频上传&#xff0c;返回路径名称场景 1.视频上传 写在Controller层 这里只是一个接收&#xff0c;调用uploadObject方法上传oss public OmsResult<FileUploadDto> goodsUploadVideo(RequestParam(value "file") Mu…

SQL优化——执行计划

文章目录 1、获取执行计划常用方法1.1、使用AUTOTRACE查看执行计划1.2、使用EXPLAIN PLAN FOR查看执行计划1.3、查看带有A-TIME的执行计划1.4、查看正在执行的SQL的执行计划 2、定制执行计划3、怎么通过查看执行计划建立索引4、运用光标移动大法阅读执行计划 SQL执行缓慢有很多…

ubuntu环境下使用g++把c++编译成汇编语言(暂时)

1. 引言 为了深入理解c&#xff0c;决定学习一些简单的汇编语言。使用ubuntu系统下g很容易将一个c的文件编译成汇编语言。本文使用此方法&#xff0c;对一个简单的c文件编译成汇编语言进行理解。 2.示例 文件名&#xff1a;reorder_demo.cpp #include<stdio.h>typede…

【网络运维知识】—路由器与交换机区别

【网络运维知识】—路由器与交换机区别 一、路由器&#xff08;Router&#xff09;和交换机&#xff08;Switch&#xff09;对比1.1 功能1.2 转发方式1.3 范围1.4 处理方式 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 路由器&#xff08…

MySQL8.0 一主二从

1. 系统环境 cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core)192.168.183.137 mysql-master 192.168.183.153 mysql-slave-1 192.168.183.154 mysql-slave-2# 关闭SELINUX sed -i s/SELINUXenforcing/SELINUXdisabled/g /etc/selinux/config seten…

基于SpringBoot的幼儿园管理系统 免费获取源码

项目源码获取方式放在文章末尾处 项目技术 数据库&#xff1a;Mysql5.7 数据表&#xff1a;16张 开发语言&#xff1a;Java(jdk1.8) 开发工具&#xff1a;idea 前端技术&#xff1a;html 后端技术&#xff1a;SpringBoot 功能简介 项目获取关键字&#xff1a;幼儿园 该…

React-css-in-js技术

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f525;系列专栏&#xff1a;React篇 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家带来React篇专栏内容:React-css-in-js技术 目录 1、简介 2、定义样式与使用 3、样式继承 4、属性传递 1、简介 …

买婴儿洗衣机怎么选择?四大绝佳好用婴儿洗衣机分享

幼龄时期的宝宝的衣物&#xff0c;是比较需要注意的时候。可能一不注意宝宝穿在身上就会有不适宜症状发生。所以宝妈们真的要随时观察&#xff0c;然后在宝宝洗衣服的这上面多下点功夫&#xff0c;不要让宝宝受到这种无谓的伤害。小婴儿的抵抗力比我们差很多。有些细菌、病毒可…

IP地址怎么实现https

IP可以申请SSL证书。可以解决企业需要对IP实现https加密的需求&#xff0c;一张证书可以支持同时绑定多个IP。 IP证书有两种级别&#xff1a;基础级IP SSL证书和标准企业级IP SSL证书。 基础型SSL证书只需要10-30分钟即可颁发&#xff0c;企业型需要1-3个工作日即可颁发。 企…

Suno,属于音乐的ChatGPT时刻来临

AI绘画 AI视频我们见过了&#xff0c;现如今AI都能生成一首音乐&#xff0c;包括编曲&#xff0c;演唱&#xff0c;而且仅需几秒的时间便可创作出两分钟的完整歌曲 相信关注苏音的很大一部分都是从获取编曲或者混音插件来的&#xff0c;现如今AI却能帮你几秒生成曲子 今天就带…

deepspeed笔记

文章目录 一、deepspeed是什么&#xff1f;二、能训多大的模型&#xff0c;耗时如何&#xff1f;三、RLHF训练流程四、通信策略 一、deepspeed是什么&#xff1f; 传统的深度学习&#xff0c;模型训练并行&#xff0c;是将模型参数复制多份到多张GPU上&#xff0c;只将数据拆分…

C语言结课实战项目_贪吃蛇小游戏

目录 最终实现效果&#xff1a; 实现基本的功能&#xff1a; 根据游戏进程解释代码&#xff1a; 游戏初始化&#xff1a; 首先进入游戏&#xff0c;我们应该将窗口名称改为 “贪吃蛇” 并将光标隐藏掉。再在中间打印游戏信息。 之后我们要把地图打印出来&#xff1a; 然后…

数据可视化插件echarts【前端】

数据可视化插件echarts【前端】 前言版权开源推荐数据可视化插件echarts一、如何使用1.1 下载1.2 找到js文件1.3 入门使用1.4 我的使用 二、前后端交互&#xff1a;入门demo2.1 前端htmljs 2.2 后端entitycontrollerservicemapper 三、前后端交互&#xff1a;动态数据3.1 前端j…