Python异常处理:优雅应对错误与异常

news2024/7/4 5:00:28

文章目录

  • 🍀引言
  • 🍀异常的概念
  • 🍀 try-except块
  • 🍀多个except块
  • 🍀else块
  • 🍀finally块
  • 🍀异常类型
  • 🍀抛出异常
  • 🍀异常处理的最佳实践
  • 🍀异常处理的现实应用
  • 🍀案例:分析学生成绩
  • 🍀总结

🍀引言

在编程过程中,错误和异常是难以避免的现象。然而,通过适当的异常处理,我们可以提高程序的可靠性、稳定性和可维护性。本文将深入介绍Python中的异常处理机制,以及如何优雅地应对各种错误和异常情况。


🍀异常的概念

异常是在程序运行过程中出现的问题,可以是语法错误逻辑错误外部条件造成的问题。Python使用异常对象来表示错误情况,并提供了一套机制来处理这些异常。


🍀 try-except块

Python中的异常处理机制通过try和except语句来实现。try块中包含可能引发异常的代码,而except块用于处理捕获到的异常。

try:
    # 可能引发异常的代码
except SomeException:
    # 处理异常的代码

🍀多个except块

你可以使用多个except块来捕获不同类型的异常,并分别进行处理。

try:
    # 可能引发异常的代码
except SomeException:
    # 处理某种类型的异常
except AnotherException:
    # 处理另一种类型的异常

🍀else块

你可以在try和except之间添加else块,用于在没有异常发生时执行特定的代码。

try:
    # 可能引发异常的代码
except SomeException:
    # 处理异常的代码
else:
    # 没有异常时执行的代码

🍀finally块

finally块中的代码无论是否发生异常都会被执行。通常用于资源清理等操作。

try:
    # 可能引发异常的代码
except SomeException:
    # 处理异常的代码
finally:
    # 无论是否发生异常都执行的代码

🍀异常类型

Python提供了各种内置的异常类型,如ZeroDivisionError、FileNotFoundError等,用于处理特定的错误情况。你也可以自定义异常类来应对特定情况。

🍀抛出异常

你可以使用raise语句手动抛出异常,将自定义信息传递给异常处理块。

if condition:
    raise MyCustomException("这是一个自定义异常")

🍀异常处理的最佳实践

避免捕获所有异常,而是只捕获你能够处理的异常。
尽量保持try块中的代码尽可能小,只捕获可能引发异常的部分。
在except块中提供有用的错误信息,方便调试和问题追踪。
使用else块来处理没有异常的情况,避免不必要的代码嵌套。
使用finally块来确保资源的释放和清理。

🍀异常处理的现实应用

文件操作时的异常处理,如文件不存在、无法写入等情况。
网络请求中的异常处理,如连接超时、无法连接等情况。
用户输入时的异常处理,如无效输入、格式错误等情况。

🍀案例:分析学生成绩

在本案例中,我们将创建一个简单的学生成绩分析程序,用于计算学生的平均成绩并提供相应的反馈。我们将运用异常处理来处理可能出现的输入错误,确保程序的稳定性和可用性。

功能要求:

输入学生的成绩。
计算学生的平均成绩。
根据平均成绩提供反馈信息。
def calculate_average(scores):
    total = sum(scores)
    average = total / len(scores)
    return average

def get_feedback(average):
    if average >= 90:
        return "优秀!"
    elif average >= 70:
        return "良好。"
    elif average >= 50:
        return "及格。"
    else:
        return "不及格。"

def main():
    try:
        num_students = int(input("请输入学生人数:"))
        scores = []
        
        for i in range(num_students):
            score = float(input(f"请输入学生{i+1}的成绩:"))
            scores.append(score)
        
        average = calculate_average(scores)
        feedback = get_feedback(average)
        
        print(f"学生的平均成绩为:{average:.2f}")
        print("反馈:", feedback)
    
    except ValueError:
        print("输入错误:请输入有效的数字。")
    except ZeroDivisionError:
        print("输入错误:学生人数不能为零。")

if __name__ == "__main__":
    main()

运行结果如下
在这里插入图片描述

这个案例实现了一个简单的学生成绩分析程序,你可以输入学生的成绩,然后计算平均成绩并给出相应的反馈信息。通过异常处理,我们确保输入的数字合法性和学生人数的有效性。
在运行案例时,你可以输入学生人数和每个学生的成绩,程序将计算平均成绩并根据平均成绩提供相应的反馈信息。如果输入的是无效的数字,程序会捕获ValueError异常并给出相应的错误提示。如果学生人数为零,程序会捕获ZeroDivisionError异常并给出相应的错误提示。

通过这个案例,你将学会如何使用异常处理来保证程序的稳定性和用户友好性。你可以根据这个案例的基础上进行拓展,添加更多功能,如计算最高分、最低分等。

🍀总结

异常处理是编程中必不可少的一部分,它帮助我们识别、捕获和处理程序运行过程中的问题。通过合理的异常处理,我们可以提高程序的健壮性和可靠性,让代码更具容错能力。在实际开发中,养成良好的异常处理习惯将为项目的成功和维护带来巨大的帮助。

请添加图片描述

挑战与创造都是很痛苦的,但是很充实。

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

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

相关文章

设计模式之代理模式(Proxy)的C++实现

1、代理模式的提出 在组件的开发过程中,有些对象由于某种原因(比如对象创建的开销很大,或者对象的一些操作需要做安全控制,或者需要进程外的访问等),会使Client使用者在操作这类对象时可能会存在问题&…

k8s ingress

一、浅谈ingress (ingress 是与service配合使用的) Ingress能把Service(Kubernetes的服务)配置成外网能够访问的URL,流量负载均衡,及SSL,并提供域名访问的虚拟主机等,客户通过访问UR…

【C++学习手札】一文带你认识C++虚函数(内层剖析)

食用指南:本文在有C基础的情况下食用更佳 🍀本文前置知识: C初识继承 ♈️今日夜电波:No title —REOL 1:02 ━━━━━━️💟──────── 4:03 …

无涯教程-Perl - use函数

描述 此函数将MODULE导出的所有功能(或仅LIST引用的功能)导入当前包的名称空间。有效等效于- BEGIN { require "Module.pm"; Module->import(); }也用于在当前脚本上强加编译器指令(编译指示),尽管从本质上讲它们只是模块。 请注意,use语句在编译时进行判断。在…

【网络】网络层——IP协议

🐱作者:一只大喵咪1201 🐱专栏:《网络》 🔥格言:你只管努力,剩下的交给时间! 网络层中,IP协议首部和有效载荷组成的完整数据称为数据报。 IP协议 🍉TCP和IP的…

文件批量管理,如何将文件进行一一复制备份并删除原文件里的文件

您是否经常需要对大量的文件进行复制备份和删除操作?是时候拥有一款高效的文件批量管理工具了!我们的一键批量管理软件为您提供了简单而强大的解决方案,让您轻松地进行文件复制备份并删除原文件,让存储空间得到高效整理&#xff0…

为什么浙大MBA项目提前批面试要控制优秀人数比例?

大家好!时间来到八月份,不知道今年浙大MBA项目的提前批面试你是否已经申请参加过?从剩余批次来看,留给考生做选择的时间确实不是很多了,仅剩的几个批次中,只有杭州第五批目前时间上还算充裕,其余…

Talk | ACL‘23 杰出论文奖上海交通大学吴蔚琪:预训练语言模型对本体知识的记忆与理解

本期为TechBeat人工智能社区第523期线上Talk! 北京时间8月17日(周四)20:00,上海交通大学硕士研究生—吴蔚琪的Talk已准时在TechBeat人工智能社区开播! 她与大家分享的主题是: “预训练语言模型对本体知识的记忆与理解”,分享了预训…

八股文之八大排序(C++)

目录 1.直接插入排序 2.希尔排序 3.简单选择排序 4.堆排序 5.冒泡排序 6.快速排序 7.归并排序 8.基数排序(桶排序) 9.主函数 10.画图总结 1.直接插入排序 int ai[] 为需要排序的数组 start 为起始位置,要求 start>1 ,因为 ai[0…

python基础4——类、异常处理、常用模块

文章目录 一、类二、python异常处理三、自定义模块3.1 保留模块测试代码3.2 添加模块使用说明 四、内置模块4.1 os标准库4.2 os.path类4.3 sys库4.4 platform库4.5 glob库4.6 random库4.7 subprocess库4.8 pickle库4.9 JSON库4.10 time库4.11 datetime库4.12 urllib库4.12.1 re…

Unity Android 之 使用 HanLP 进行句子段落的分词处理(包括词的属性处理)的简单整理

Unity Android 之 使用 HanLP 进行句子段落的分词处理(包括词的属性处理)的简单整理 目录 Unity Android 之 使用 HanLP 进行句子段落的分词处理(包括词的属性处理)的简单整理 一、简单介绍 二、实现原理 三、注意事项 四、效…

水泥厂人员定位方案

水泥厂人员定位方案可以采用不同的技术和策略。以下是一个常见的水泥厂人员定位方案的步骤: 1.选择合适的定位技术:根据水泥厂的需求和运营环境,选择适合的定位技术,例如基于UWB(Ultra-Wideband)、RFID&am…

无涯教程-Perl - undef函数

描述 此函数未定义EXPR的值。用于标量,列表,哈希,函数或类型范围。在带有诸如undef $hash {$key}之类的语句的哈希上使用;实际上将指定键的值设置为未定义的值。 如果要从哈希中删除元素,请使用delete函数。 语法 以下是此函数的简单语法- undef EXPRundef返回…

windows ipv4 多ip地址设置,默认网关跃点和自动跃点是什么意思?(跃点数)

文章目录 Windows中的IPv4多IP地址设置以及默认网关跃点和自动跃点的含义引言IPv4和IPv6:简介多IP地址设置:Windows环境中的实现默认网关跃点:概念和作用自动跃点:何时使用?关于“跃点数”如何确定应该设置多少跃点数&…

【3Ds Max】布料命令的简单使用

简介 在3ds Max中,"布料"(Cloth)是一种模拟技术,用于模拟物体的布料、织物或软体的行为,例如衣物、帆布等。通过应用布料模拟,您可以模拟出物体在重力、碰撞和其他外力作用下的变形和动态效果。…

【学习FreeRTOS】第11章——FreeRTOS中任务相关的其他API函数

1.函数总览 序号函数描述1uxTaskPriorityGet()获取任务优先级2vTaskPrioritySet()设置任务优先级3uxTaskGetNumberOfTasks()获取系统中任务的数量4uxTaskGetSystemState()获取所有任务的状态信息5vTaskGetInfo()获取单个任务的状态信息6xTaskGetCurrentTaskHandle()获取当前任…

利用Velero对K8S备份还原与集群迁移实战

一、简介 Velero 是一款云原生时代的灾难恢复和迁移工具,采用 Go 语言编写,并在 github 上进行了开源,利用 velero 用户可以安全的备份、恢复和迁移 Kubernetes 集群资源和持久卷。 开源地址:https://github.com/vmware-tanzu/v…

Element通过v-for循环渲染的form表单校验

需求&#xff1a;有个表单信息是v-for渲染的&#xff0c;例如下图&#xff0c;通过循环遍历实现新增和删除模块&#xff0c;按照平时的写法实现校验&#xff0c;是不能实现我们想要的效果&#xff0c;根据这个需求&#xff0c;我找到了一个解决方法 1.HTML <el-form ref&qu…

【抓包工具】whistle抓包工具分享

一、使用场景 抓包请求转发 二、基础篇 官网&#xff1a;http://wproxy.org/whistle/ github: https://github.com/avwo/whistle 简介&#xff1a; whistle(读音[ˈwɪsəl]&#xff0c;拼音[wēisǒu])基于Node实现的跨平台web调试代理工具&#xff0c;类似的工具有Window…

React 之 Router - 路由详解

一、Router的基本使用 1. 安装react-router react-router会包含一些react-native的内容&#xff0c;web开发并不需要 npm install react-router-dom 2. 设置使用模式 BrowserRouter或HashRouter Router中包含了对路径改变的监听&#xff0c;并且会将相应的路径传递给子组件Bro…