15_Python中错误和异常处理

在这里插入图片描述

在Python编程中,错误(Error)和异常(Exception)是两个相关的概念,但它们之间有细微的区别。

错误(Error)

错误通常是指在执行代码时遇到的问题,这些问题可能会导致程序崩溃或行为异常。错误通常是由程序逻辑错误或外部条件导致的,它们是编程中不可避免的一部分。

例如,以下代码中的逻辑错误会导致程序无法正常执行:

# 错误的代码示例
for i in [1, 2, 3]:print(i + 0)

在这个例子中,代码尝试对每个数字加0,但这是不必要的,因为它不会改变数字的值。这并不是一个异常,而是一个逻辑错误,它不会导致程序抛出异常,但可能会导致代码运行得不如预期。

异常(Exception)

异常是指在程序执行过程中出现的意外情况,它们是程序无法正常执行的信号。异常通常是由程序无法处理的特定条件引起的,例如除以零、打开不存在的文件、网络请求失败等。当这些情况发生时,程序会抛出异常,这通常会导致程序执行中断。

例如,以下代码中的除以零操作会引发一个异常:

# 异常的代码示例
try:print(1 / 0)
except ZeroDivisionError:print("You can't divide by zero!")

在这个例子中,尝试除以零会引发一个ZeroDivisionError异常。except块捕获了这个异常,并打印了一条错误消息。

错误与异常的区别

  • 范围:错误包括异常,异常是错误的一种特殊类型。
    • 错误可以分为两类:
      • 运行时错误(Run-time errors)
      • 逻辑错误(Logic errors)。
    • 运行时错误通常会引发异常,而逻辑错误不会。
  • 影响:错误可能会导致程序崩溃或行为异常,但不一定抛出异常。异常一定会抛出,并导致程序执行中断。
  • 处理:错误通常需要通过代码逻辑来解决,而异常可以通过异常处理机制来处理。
  • 使用场景:错误通常用于处理程序的逻辑错误,异常用于处理程序无法控制的意外情况。

在编程中,理解错误和异常的区别对于编写健壮的程序非常重要。正确地处理异常可以确保程序在面对意外情况时仍然能够稳定运行,而错误处理则可以帮助我们修复程序的逻辑错误。

在Python中,错误和异常处理是非常重要的,它帮助程序在面对错误情况时保持稳定运行,并允许开发者以结构化的方式处理这些错误。以下是Python中处理错误和异常的一些常见方法。

基本的异常处理

在Python中,异常处理是通过try、except、finally和else关键字来完成的。

try-except

最基本的异常处理结构是try-except块。使用try块来封装可能引发异常的代码,而except块用来捕获并处理这些异常。

如果有出现多个异常, except 只能捕获一个。

try:# 可能引发异常的代码x = 1 / 0
except ZeroDivisionError:# 当发生 ZeroDivisionError 异常时执行的代码print("You can't divide by zero!")

try-except-else

else块在try块没有引发异常时执行。

try:x = 1 / 1
except ZeroDivisionError:print("You can't divide by zero!")
else:print("Division was successful!")

try-except-finally

finally块无论是否发生异常都会执行,通常用于执行清理代码。

try:x = 1 / 0
except ZeroDivisionError:print("You can't divide by zero!")
finally:print("This will always be executed.")

捕获多个异常

可以一次性捕获多个异常,并分别处理。

try:x = 1 / 0
except (ZeroDivisionError, TypeError):print("An error occurred!")

或者,也可以在一个except块中捕获所有异常。

try:x = 1 / 0
except Exception as e:print(f"An error occurred: {e}")

自定义异常

可以定义自己的异常类,通常通过继承Exception类。

class CustomError(Exception):passtry:raise CustomError("Something went wrong!")
except CustomError as e:print(e)

断言(Assertions)

使用assert语句可以在代码中设置检查点,如果表达式为False,则会引发AssertionError。

x = 1
assert x > 0, "x should be positive"

异常链

在处理异常时,可以将一个异常包装在另一个异常中,形成异常链。

try:x = 1 / 0
except ZeroDivisionError as e:raise ValueError("Invalid value for division") from e

在编写Python代码时,良好的异常处理能够使程序更加健壮,能够优雅地处理错误情况,并提供有用的反馈。记住,不应该滥用异常处理来代替正常的流程控制。

常见内置异常及其处理

TypeError

在执行操作时遇到了类型不匹配的问题。例如,尝试将一个字符串转换为整数,或者尝试将一个整数赋值给一个字符串类型的变量时,就会引发 TypeError。

try:# 尝试将字符串转换为整数number = "abc"result = int(number)print(result)
except TypeError:# 如果发生 TypeError,执行以下代码print("The provided value is not a valid number!")

ZeroDivisionError

当尝试除以零时,会引发ZeroDivisionError异常。

try:print(1 / 0)
except ZeroDivisionError:print("You can't divide by zero!")

FileNotFoundError

当尝试打开不存在的文件时,会引发FileNotFoundError异常。

try:with open("non_existent_file.txt", "r") as file:content = file.read()
except FileNotFoundError:print("The file was not found!")

ValueError

当尝试执行一个操作,但提供的值不满足预期的条件时,会引发ValueError异常。

try:x = int("hello")
except ValueError:print("The input is not a valid integer!")

KeyError

当尝试访问一个字典中不存在的键时,会引发KeyError异常。

try:my_dict = {"key": "value"}value = my_dict["invalid_key"]
except KeyError:print("The key does not exist in the dictionary!")

AttributeError

当尝试访问一个对象没有的属性时,会引发AttributeError异常。

try:my_obj = object()my_obj.invalid_attribute
except AttributeError:print("The object does not have the specified attribute!")

总结

  • 异常是程序执行过程中发生的意外情况。
  • 内置异常是由Python解释器定义的,用于处理常见的编程错误。
  • 自定义异常是由程序员定义的,用于处理特定的编程错误。
  • 异常处理机制包括try、except、finally和else关键字。
  • 正确地处理异常可以确保程序在面对意外情况时仍然能够稳定运行。

在编写Python代码时,理解并正确使用异常处理机制是非常重要的,它可以帮助我们编写更加健壮和可靠的程序。

附件

本文对应的jupyter notebook源码链接,欢迎下载练习:https://download.csdn.net/download/fx_yzjy101/89779315

如有问题请留言。

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

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

相关文章

python使用vscode 所需插件

1、导读 环境:Windows 11、python 3.12.3、Django 4.2.11、 APScheduler 3.10.4 背景:换系统需要重新安装,避免后期忘记,此处记录一下啊 事件:20240921 说明:记录,方便后期自己查找 2、插件…

vmware官网下载

1 https://www.vmware.com/ 2 3 4 https://www.vmware.com/products/desktop-hypervisor/workstation-and-fusion

想要让ai做ppt?试试这四个!

今天咱们来聊点新鲜的,就是那些能让我们从繁琐的PPT制作中解脱出来的智能工具。你是否还在为制作PPT熬夜到天亮?别担心,我这就带你看看目前市面上最火的几款智能PPT生成工具,它们的表现如何呢?让我们一探究竟&#xff…

2021的OWASP TOP 10

OWASP(开放Web应用安全项目)是一个非营利性组织,旨在提高软件安全性。 每四年一个更新,2025年就会再次更新,到时候这篇文章也会实时更新。 我主要从定义,场景,原因,影响&#xff0…

简单水印通过python去除

简单水印通过python去除 先看效果,如果效果不是你需要的就可以不用浪费时间。 注意:这种主要还是对应的文字在水印上方的情况,同时最好不要有渐变水印否则可能最后输出的图片的水印还会有所残留,不过还是学习使用,相信…

VisionPro - 基础 - 00 模板匹配技术和在VP中的使用 - PMAlign - PatMax - (4)- 控制模板的匹配

前言: 针对PatMax 的高级应用和原理,在这一节继续进行说明:这一节主要考虑的是PatMax模板匹配的原理:如何控制模板的匹配。 本节先介绍了几个模板匹配的衡量标准,比如模板匹配分数,和模板的几种模板匹配的…

二维光场分析

一、单色光波长的复振幅表示 实波函数 复波函数 复振幅 由于时间因子相同,可以用复振幅来描述 光强 1.1 球面波的复振幅(单色点光源发出的光波) 等相位面是同心球面,波矢处处与等相位面垂直,即 是 r = 1 处的振幅 发散球面波: 会聚球面波: <

SOMEIP_ETS_121: SD_Initial_Events_after_SubscribeEventgroup

测试目的&#xff1a; 验证DUT在接收到Tester的SubscribeEventgroup消息后&#xff0c;能够发送SubscribeEventgroupAck确认消息&#xff0c;并立即发送对应的初始化字段给订阅的事件组。 描述 本测试用例旨在确保DUT能够正确响应SubscribeEventgroup消息&#xff0c;通过发…

arthas -- xxljob本地调试

方案一&#xff1a;测试类 package cn.wanda.wic.content.job.xxljob;import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest;import javax.annotation.Resource;SpringBootTest public class ShopResourceMigrationJobTest {Reso…

探索人工智能绘制宇宙地图的实现

人工智能 (AI) 已成为了解世界的重要工具。现在&#xff0c;随着人们对太空探索的兴趣重新升温&#xff0c;人工智能也可能对其他世界产生同样的影响。 尽管经过了几十年的研究&#xff0c;科学家们对地球大气层以外的宇宙仍然知之甚少。绘制行星、恒星、星系及其在太空中的运…

CCRC-CDO首席数据官:未成年人首次上网年龄持续降低

近日&#xff0c;中国社会科学院新闻与传播研究所联合社会科学文献出版社发布了《青少年蓝皮书&#xff1a;中国未成年人互联网运用报告(2024)》&#xff0c;该报告对中国未成年人的互联网使用情况进行了全面的研究和专项汇报。 调查数据透露&#xff0c;未成年人接触网络的年…

OpenHarmony(鸿蒙南向开发)——标准系统方案之瑞芯微RK3568移植案例(上)

往期知识点记录&#xff1a; 鸿蒙&#xff08;HarmonyOS&#xff09;应用层开发&#xff08;北向&#xff09;知识点汇总 鸿蒙&#xff08;OpenHarmony&#xff09;南向开发保姆级知识点汇总~ OpenHarmony&#xff08;鸿蒙南向开发&#xff09;——轻量和小型系统三方库移植指南…

[python]从零开始的PySide安装配置教程

一、PySide是什么&#xff1f; PySide 是 Qt for Python 项目的一部分&#xff0c;它提供了与 PyQt 类似的功能&#xff0c;使开发者能够使用 Python 编程语言来构建基于 Qt 的图形用户界面 (GUI) 应用程序。PySide 是由 Qt 公司官方维护的&#xff0c;而 PyQt 则是由第三方开发…

化学分子结构检测系统源码分享

化学分子结构检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer…

day-57 边积分最高的节点

思路 因为节点编号从0到n-1&#xff0c;所有可以创建一个数组用来记录每个节点的边积分&#xff0c;遍历edges数组&#xff0c;并且令ansarr[edges[i]]i&#xff0c;遍历结束后即可得到每个节点的边积分&#xff0c;再遍历ansarr数组&#xff0c;找到值最大的那个索引即为答案&…

硬盘格式化后能恢复数据吗?试试这四款工具吧!

数据丢失&#xff0c;这可能是每个电脑用户都曾遇到过的噩梦。今天&#xff0c;我就来给大家分享一下我使用过的四款数据恢复软件在实际操作中的表现&#xff0c;看看哪款软件能成为你数据恢复的得力助手。 一、福昕数据恢复 网址&#xff1a;https://www.pdf365.cn/foxit-re…

UI自动化测试框架:PO模式+数据驱动详解

1. PO 设计模式简介 什么是 PO 模式&#xff1f; PO&#xff08;PageObject&#xff09;设计模式将某个页面的所有元素对象定位和对元素对象的操作封装成一个 Page 类&#xff0c;并以页面为单位来写测试用例&#xff0c;实现页面对象和测试用例的分离。 PO 模式的设计思想与…

[数据结构与算法·C++版] 笔记 1.2 什么是数据结构

1.2 什么是数据结构 结构&#xff1a;实体 关系数据结构&#xff1a; 按照逻辑关系组织起来的一批数据&#xff0c;按一定的存储方法把它存储在计算机中在这些数据上定义了一个运算的集合 数据结构的逻辑组织 线性结构 线性表&#xff08;表&#xff0c;栈&#xff0c;队列&…

11.1 溪降技术:下方保护

目录 11.1 下方(底部)保护概述观看视频课程电子书&#xff1a;底部保护技术要点 11.1 下方(底部)保护 概述 一名峡谷探险者为他的队友提供底部保护 峡谷探险是一项团队运动&#xff0c;作为峡谷探险团队的一员意味着在下降过程中要相互帮助、协作&#xff0c;特别是要关心彼此的…

库函数模块创建

工程创建 创建这个工程模版&#xff0c;是为了我们后面免去我们后面创建工程模版的步骤 创建这个文件&#xff0c;这个文件是用来存放我们编译生成的一些中间文件&#xff0c;C&#xff0c;汇编&#xff0c;链接的一些列表清单&#xff0c;调试信息&#xff0c;以及需要我们下…