【Python】一文带你认识 异常处理 + 简单操作

news2024/10/7 18:30:45

作者主页:爱笑的男孩。的博客_CSDN博客-深度学习,活动,python领域博主爱笑的男孩。擅长深度学习,活动,python,等方面的知识,爱笑的男孩。关注算法,python,计算机视觉,图像处理,深度学习,pytorch,神经网络,opencv领域.https://blog.csdn.net/Code_and516?type=blog个人简介:打工人。

持续分享:机器学习、深度学习、python相关内容、日常BUG解决方法及Windows&Linux实践小技巧。

如发现文章有误,麻烦请指出,我会及时去纠正。有其他需要可以私信我或者发我邮箱:zhilong666@foxmail.com 

本文将详细讲解Python的 异常处理 模块


目录

一、简介

二、发展史

三、主要功能详解

        1. raise 语句

        2. try-except 语句

        3. try-finally 语句

        4. try-except-finally 语句

四、总结


一、简介

        Python 是一种解释型的编程语言,它的语法简洁、易于阅读和理解,而且它的应用范围非常广泛,涵盖了 web 开发、数据分析、机器学习等多个领域。Python 的异常处理机制是它的一个重要特性,它可以让程序在出现错误时优雅地退出,而不是抛出异常导致程序崩溃。

        在编程过程中,难免会导致一些错误或者异常情况的出现,例如文件读写出错、网络连接失败、极端数据输入等等,这些异常情况可能会导致程序崩溃。 

        异常处理就可以让程序员在程序出现错误时得到提示,并让程序自动处理异常,可以让程序在遇到异常情况时不会崩溃,即使发生了错误,程序也会继续执行下去。Python 的异常处理机制通过 raise 语句引发异常,再通过 try-except 语句捕获异常,并给出相应的处理方法。

二、发展史

        Python 的异常处理机制始于 1991 年的 Python 1.0 版本,当时的异常只有两种,分别是 AssertionError 和 KeyboardInterrupt。Python 1.5 版本新增了 Exception 类型,这使得 Python 的异常机制变得更加丰富,可以将多种异常类型分别处理。到了 Python 2.5 版本,新增了 with 语句,它使得 Python 的异常处理机制更加易用,从此 Python 函数库中很多函数都使用了 with 语句来防止资源泄漏。在 Python 3.0 版本中,异常处理方面的改进也非常明显,异常的导入语法进行了改变,还添加了一些新的内置异常。

三、主要功能详解

        1. raise 语句

        在 Python 中,raise 语句用于引发异常,其基本语法如下:

raise [exception[, args[, traceback]]]

        其中 exception 是要引发的异常,args 是传递给异常处理程序的参数,traceback 是一个可选参数,用于指示异常的上下文。

  • exception:可以是一个字符串、一个异常类型的实例对象或其他对象。如果是字符串,则会创建一个 ValueError 异常,否则就需要根据参数的类型创建一个合适的异常对象。

  • args:参数会按照给出的顺序存储在 args 元组中,并传递给异常处理程序。

  • traceback:如果提供了该参数,则可以访问 traceback 对象,以查看异常的上下文信息。

        示例代码: 

def raise_demo():
   try:
      a = 5 / 0
   except:
      print("An error occurred")
      raise
      
raise_demo()

        解释:

        在这个示例中,我们使用了 raise 语句来在 except 语句块中重新引发异常。在 try 语句块中,我们尝试用 0 的值来除以 5,这会导致 ZeroDivisionError 异常的抛出,然后我们在 except 块中捕获此异常并向控制台输出一条消息。最后,我们使用 raise 语句将这个异常重新引发,使它继续传递到调用函数的地方。

        2. try-except 语句

        Python 的异常处理机制基于 try-except 语句,它的作用是在 try 语句块中尝试执行代码,若出现异常则在 except 语句块中捕获并处理异常。基本语法如下:

try:
   # 执行可能会抛出异常的代码
except [Exception1[, Exception2[,...ExceptionN]]] as [Variable1[, Variable2[,...VariableN]]]:
   # 处理异常
finally:
   # 如果有,执行最后的清理代码
  • try:该语句块中包含有可能会引发异常的代码。

  • except:该语句块中包含处理异常的代码。

  • finally:即使没有异常发生,在 try 中使用的任何资源也应该在最后清理掉。finally 块中的语句无论是否引发异常和是否处理异常都会执行。

  • Exception1, …, ExceptionN:可选项。名称为 Exception1, …, ExceptionN 的一个或多个异常类的列表,用于指示在此块中处理哪些异常,或者该块中的所有异常。

  • Variable1, …, VariableN:可选项。变量名称列表,用于显式命名以存储来自所触发异常的额外信息。

        示例代码: 

def try_except_demo():
   try:
      a = 5 / 0
   except ZeroDivisionError:
      print("ZeroDivisionError: division by zero")
   except:
      print("An error occurred")
   finally:
      print("The 'try except' is finished")

try_except_demo()

        解释:

        在这个示例中,我们使用了 try-except 语句来集中处理可能出现的异常。在 try 块中,我们尝试进行一个被 0 除操作,这会导致 ZeroDivisionError 异常的抛出。由于我们已经知道会出现该异常,所以我们使用了 except ZeroDivisionError 语句块来捕获该异常。除此之外,我们还编写了一个 except 块,用于处理其他任何类型的异常。最后,我们使用 finally 块来执行必须在此处进行的最终清理操作。

        3. try-finally 语句

        Python 的 try-finally 语句用于在代码中引发异常的情况下,确保使用的资源得到正确的释放。基本语法如下:

try:
   # 执行可能会抛出异常的代码
finally:
   # 如果有,执行最后的清理代码
  • try:该语句块中包含有可能会引发异常的代码。

  • finally:即使没有异常发生,在 try 中使用的任何资源也应该在最后清理掉。finally 块中的语句无论是否引发异常和是否处理异常都会执行。

        示例代码:

def try_finally_demo():
   try:
      f = open("test.txt", "w")
      f.write("Hello, World!")
   finally:
      f.close()

try_finally_demo()

        解释:

        在这个示例中,我们使用了 try-finally 语句来确保在使用完文件句柄之后,能够正确地关闭文件。在 try 块中,我们打开了一个名为 test.txt 的文件,然后写入一些内容。如果在该过程中发生任何异常,例如文件不存在或权限不足,Python 会自动引发异常,并跳过 finally 块。如果一切顺利,Python 会执行 finally 块中的语句,即关闭已打开的文件。

        4. try-except-finally 语句

        Python 的 try-except-finally 语句是 try-except 和 try-finally 的结合。它的作用是在 try 语句块中尝试执行代码,若出现异常则在 except 语句块中捕获并处理异常,无论是否出现异常,都会在 finally 语句块执行的代码。基本语法如下:

try:
   # 执行可能会抛出任何异常的代码
except [Exception1[, Exception2[,...ExceptionN]]] as [Variable1[, Variable2[,...VariableN]]]:
   # 处理异常
finally:
   # 如果有,执行最后的清理代码
  • try:该语句块中包含有可能会引发异常的代码。

  • except:该语句块中包含处理异常的代码。

  • finally:即使没有异常发生,在 try 中使用的任何资源也应该在最后清理掉。finally 块中的语句无论是否引发异常和是否处理异常都会执行。

  • Exception1, …, ExceptionN:可选项。名称为 Exception1, …, ExceptionN 的一个或多个异常类的列表,用于指示在此块中处理哪些异常,或者该块中的所有异常。

  • Variable1, …, VariableN:可选项。变量名称列表,用于显式命名以存储来自所触发异常的额外信息。

        示例代码:

def try_except_finally_demo():
   try:
      a = 5 / 0
   except ZeroDivisionError as e:
      print("ZeroDivisionError: division by zero")
   except:
      print("An error occurred")
   finally:
      print("The 'try except' is finished")

try_except_finally_demo()

        解释:

        在这个示例中,我们使用了 try-except-finally 语句来处理可能出现的异常,并确保在执行代码后正确地释放所使用的资源。在 try 块中,我们尝试进行一个被 0 除操作,这会导致 ZeroDivisionError 异常的抛出。由于我们已经知道会出现该异常,所以我们使用了 except ZeroDivisionError 语句块来捕获该异常。除此之外,我们还编写了一个 except 块,用于处理其他任何类型的异常。最后,我们使用 finally 块来执行必须在此处进行的最终清理操作。

四、总结

        Python的异常处理机制是一种强大的编程技术,可以提高程序的稳定性和健壮性。

        Python 的异常处理机制可以让开发人员更好地掌控程序的异常情况,从而让程序在设计之初就具有了健壮性和鲁棒性。Python 中的异常处理机制主要由 raise 语句和 try-except 语句构成,可以在代码执行时引发异常、捕获异常和处理异常。除此之外,还可以利用 try-finally 和 try-except-finally 语句来在程序出现异常或者执行完毕后对资源进行优雅的回收。

        了解了这些异常处理技术,可以帮助程序员更好地编写健壮的 Python 代码。在实际编码中,我们应该根据程序的实际需要,灵活运用异常处理技术,以保证程序的正确执行。

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

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

相关文章

2023百城巡展杭州站:强合作、深扎根,“浙”里共赢数安蓝海

灵秀杭州,数字经济之城 十年来,以不凡实力 筑就了繁荣的数字经济 成为中国数据要素最为集中的城市之一 6月9日,“新起点 新战略 共赢数安蓝海”,2023美创科技百城巡展来到了“大本营”——杭州。 邀老友,迎新友&…

jenkins发布Kubernetes(K8s)集群(基于containerd)

一、实验环境 1、k8s环境 版本v1.26.5,容器为containerd 二进制安装Kubernetes(K8s)集群(基于containerd)—从零安装教程(带证书) 主机名IP系统版本安装服务master0110.10.10.21rhel7.5nginx、etcd、api-server、scheduler、controller-manag…

高考落榜,误打误撞学习了软件测试现在月薪30k成为了人人羡慕的对象

记得我刚高考结束时,并没有想象中的狂欢,反而是一种处于一种坐立不安的焦虑中,因为那时单纯地认为:这张试卷,将决定我的一生。对于将信仰寄托于高考的学生来说,当网页上高考成绩弹出的一瞬间,世…

软件测试基础知识 —— 黑盒测试

黑盒测试 黑盒测试又称正确性测试,或功能测试,是对产品的各功能进行验证,用于检查产品是否达到用户要求的功能或者说检查软件的功能是否符合规格说明。在测试中,把程序看作一个不能打开的黑盒子,在完全不考虑程序内部…

利用隐藏的正例进行无监督的语义分割

文章目录 Leveraging Hidden Positives for Unsupervised Semantic Segmentation摘要本文方法目标函数Gradient Propagation to Local Hidden Positives 实验结果 Leveraging Hidden Positives for Unsupervised Semantic Segmentation 摘要 对标记像素级注释的人力的巨大需求…

CancelToken中断请求

使用场景&#xff1a;页面切换时&#xff0c;主动取消掉未调用完成的接口 注意&#xff1a;因为测试&#xff0c;连续调用5次请求&#xff0c;正常情况下只用一次 <script> import axios from axios; //这里采用传递executor函数到CancelToken的构造函数来创建cancel to…

python使用 flask+vue 制作前后端分离图书信息管理系统

前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 制作前后端分离图书信息管理系统的思路&#xff1a; 前端部分 首先&#xff0c;我们可以使用 VueJS 作为前端框架&#xff0c;并通过 Vue CLI 工具进行创建和管理项目。 后端部分 后端部分我们可以采用 Python Flask 框架,这…

访问学者去日本需要做什么准备?

作为访问学者前往日本需要做一些准备工作&#xff0c;确保顺利进行研究和交流。以下是知识人网的一些建议&#xff1a; 1. 签证&#xff1a;在计划出国前&#xff0c;你需要办理日本的访问学者签证。了解签证类型和所需材料&#xff0c;并提前准备好申请所需的文件。 2. 研究计…

农村饮水安全政策要求与解决措施

农村饮水安全&#xff0c;是指农村居民能够及时、方便地获得足量、洁净、负担得起的生活饮用水。农村饮水安全包括水质、水量、用水方便程度和供水保证率4项评价指标。 一、农村饮水安全问题 农村饮水安全问题一直是农村发展的重要问题。在过去&#xff0c;由于农村供水设施落…

杰林码在荧光细胞识别中的应用(一)

一、杰林码轮廓预测算法 本算法是基于我的《一种全新的图像变换理论的实验》系列博客中的算法构造的轮廓预测算法&#xff0c;能有效的进行细胞轮廓预测&#xff0c;而且从前景到背景支持50个深度层次的轮廓预测。优点&#xff1a; 1、支持各种清晰度和分辨率&#xff0c;通过…

this关键字

1. 关键字&#xff1a;this 1.1 this 是什么&#xff1f; 首先。this在Java中是一个关键字&#xff0c;this 指代的是本类的引用对象 1.2 什么时候使用 this 1.2.1 实例方法或构造器中使用当前对象的成员 1、在实例方法或构造器中&#xff0c;我们在使用get和set方法中使用…

年化33.8%,夏普1.22:lightGBM在ETF行业模动上小试牛刀(附代码下载)。

原创文章第240篇&#xff0c;专注“个人成长与财富自由、世界运作的逻辑与投资"。 今天做排序学习算法在ETF行业轮动上的策略&#xff0c;我们选用的DBDT框架是lightGBM&#xff0c;它的优点就是快且效果不错。 我们的候选集是29个行业ETF&#xff1a; etfs [159870.S…

Python编程:标准库logging使用

Python编程&#xff1a;标准库logging使用 一、 基础使用 1.1 logging使用场景 ​ 日志是什么&#xff1f;这个不用多解释。百分之九十的程序都需要提供日志功能。Python内置的logging模块&#xff0c;为我们提供了现成的高效好用的日志解决方案。但是&#xff0c;不是所有的…

python爬虫——怎么抓取职位信息

目录 背景 为什么要抓取职位信息 怎么抓取职位信息 代码示例 被反爬怎么办 使用代理IP进行爬取 总结 背景 高考刚结束&#xff0c;马上又到了大学生毕业的时候了&#xff0c;各大厂也开始了一波招工潮了&#xff0c;想知道大厂或竞争对手都招些什么人&#xff0c;有什么…

来了解一下这几个网络设备日志级别分别都适用在何种场景?

在华为设备中&#xff0c;涉及到日志的&#xff0c;我们经常会在日志级别上迷糊&#xff0c;本文就给大家介绍8种日志级别以及每个级别适用的场景。 1. Emergency&#xff08;紧急&#xff09; 紧急级别的日志是指最高级别的日志&#xff0c;表示系统遇到了严重的错误或故障&…

JMeter+Ant+jenkins搭建接口自动化测试环境

目录 前言&#xff1a; 1.ant简介 2. 构建ant环境 3.JMeter与Ant集成 4. 报告优化 5.jenkins持续集成 前言&#xff1a; JMeter是一个开源的性能测试工具&#xff0c;可以用于测试Web应用程序或API接口的性能&#xff0c;支持多种通信协议和数据格式。Ant是一个构建工具&…

ui自动化 SeleniumBase

目录 前言&#xff1a; git克隆 校验邮件的案例: 注意事项: 前言&#xff1a; SeleniumBase是一个基于Selenium WebDriver的Python框架&#xff0c;用于UI自动化测试。它具有简单易用的API接口&#xff0c;可轻松编写测试脚本以及管理测试用例。SeleniumBase不仅提供了Web…

【LeetCode】HOT 100(10)

题单介绍&#xff1a; 精选 100 道力扣&#xff08;LeetCode&#xff09;上最热门的题目&#xff0c;适合初识算法与数据结构的新手和想要在短时间内高效提升的人&#xff0c;熟练掌握这 100 道题&#xff0c;你就已经具备了在代码世界通行的基本能力。 目录 题单介绍&#…

5月总共面试31次,我人麻了....

3年测试经验原来什么都不是&#xff0c;只是给你的简历上画了一笔&#xff0c;一直觉得经验多&#xff0c;无论在哪都能找到满意的工作&#xff0c;但是现实却是给我打了一个大巴掌&#xff01;事后也不会给糖的那种... 先说一下自己的个人情况&#xff0c;普通二本计算机专业…

华为OD机试真题 JavaScript 实现【寻找密码】【2023Q1 100分】,附详细解题思路

一、题目描述 小王在进行游戏大闯关&#xff0c;有一个关卡需要输入一个密码才能通过&#xff0c;密码获得的条件如下&#xff1a; 在一个密码本中&#xff0c;每一页都有一个由 26 个小写字母组成的若干位密码&#xff0c;从它的末尾开始依次去掉一位得到的新密码也在密码本…