专栏首页完美ExcelPython学习笔记:异常处理

Python学习笔记:异常处理

本文讲解Python如何处理异常,以及如何使用异常处理语句防止程序崩溃。

异常是我们可以处理的错误,例如,典型的0不能作为除数:

图1

当Python遇到不能执行的操作时,会触发异常,程序中止。

程序在运行时会遇到各种各样的环境,在编写程序时,不可能面面俱到,但我们可以充分利用Python的异常处理机制来避免发生异常时程序中止。

Python引发的所有异常都是超类Exception的子类,继承了其标准属性。在Python手册中列出了所有标准的错误。

try except语句

使用Python的异常处理语句,可以非常优雅地处理发生的异常。其基本形式为:

try:

[正常执行的语句]

except:

[失败后执行的语句]

try语句调用上下文管理器,程序先执行try语句块中的语句代码,如果其中发生任何异常,则执行except块中的语句代码。如果try语句块执行正常,则退出上下文管理器并跳过except代码块。例如:

图2

注意到在示例中,即使触发了ZeroDivisionError错误,程序也没有中止,并给出了我们预先定义的错误消息。

限定try except作用范围

上文中使用了try语句的一般形式,其在任何异常触发时都执行except代码块并给出预先定义的错误消息。如果将上文中的代码修改为:

图3

这段代码没有给变量m预先赋值,触发错误的原因是由于未定义的变量m引起的错误NameError。此时,我们希望得到真正错误的原因,而不是程序给出的ZeroDivisionError异常。

此时,限定try except的作用范围是一种好的处理方式,其语法形式为:

try:

[正常执行的语句]

except [Exception]:

[失败后执行的语句]

这里在[Exception]中定义有效异常的元组,发生该异常时才执行except语句块,否则将中止程序。例如:

图4

可以添加多个expect语句,以处理try语句块中可能出现的多个异常,例如:

图5

try…except…else…finally语句

这是更健壮的Python异常处理语句结构:

try:

[正常执行的语句]

except [Exception]:

[失败后执行的语句]

else:

[Else子句]

finally:

[Final子句]

仅当try语句块没有引发异常时才会执行else语句块。无论是否引发异常,都将执行finally语句块。

手动触发异常

编写代码时,可能会决定在某些情况下想要手动引发异常。例如,假设定义一个函数dabs(x),它是绝对值函数abs(x)的导数。绝对值函数的导数在0处没有定义,因此希望确保任何输入dabs(0)都会导致错误。可以使用raise [Exception]([ErrText])语句格式来引发错误,这将在字符串[ErrText]中使用给定的错误消息引发给定的[Exception]。例如:

图6

请注意,在上面的raise语句中使用了已经存在的内置异常ValueError,这样就不必先定义该关键字了。

如果内置的Python异常不适用将要引发的异常,那么可以使用类创建自己的异常。在创建这些自定义类时,将从超类Exception继承标准异常属性。因为所有必要的方法和属性都是从Exception继承的,所以只需要在类的主体中包含一个pass语句。

Python遇到pass语句时,会继续执行代码,就像它不存在一样。pass语句的用处是占位,保持程序结构的完整性,以便将来在此添加有用的语句。

例如,下面的代码在dabs(x)函数中定义了一个新的UndefinedDerivative异常:

图7

注意到,异常的名称现在是自已定义的UndefinedDerivative。

本文分享自微信公众号 - 完美Excel(excelperfect),作者:fanjy

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-05-19

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Excel应用实践22: 比较并合并工作表

    有两个工作表,均含有相同的数据,但最后一列名称和产品的数量不同,如下图1和图2所示。

    fanjy
  • 问与答60: 怎样使用矩阵数据在工作表中绘制线条?

    本文来源于wellsr.com的Q&A栏目,个人觉得很有意思,对于想要在工作表中使用形状来绘制图形的需求比较具有借鉴意义,特辑录于此,代码稍有修改,供大家参考。

    fanjy
  • VBA专题10-9:使用VBA操控Excel界面之在功能区中添加自定义按钮控件

    下面的一系列文章将重点讲解如何在功能区中添加不同类型的自定义控件,它们与最底层的自定义命令相关。这里的自定义命令是指程序员自已编写的VBA过程。

    fanjy
  • Python 异常处理大全

    python提供了两个非常重要的功能来处理python程序在运行中出现的异常和错误。你可以使用该功能来调试python程序。

    Python知识大全
  • Java语言如何进行异常处理,关键字:throws、throw、try、catch、finally分别如何使用?

    Java通过面向对象的方法进行异常处理,把各种不同的异常进行分类,并提供了良好的接口。在Java中,每个异常都是一个对象,它是Throwable类或其子类...

    唐怀瑟
  • Python入门基础解答条件判断语句和循环语句的新手使用教程

    无论什么语言都不会缺少条件判断语句和循环语句。我们日常中也有条件判断和循环,条件判断(明天如果下雨就不出门,如果晴天就出门。);循环(上学朗读课文,老师说:把文...

    啦啦啦
  • Python入门基础解答条件判断语句和循环语句的新手使用教程

    无论什么语言都不会缺少条件判断语句和循环语句。我们日常中也有条件判断和循环,条件判断(明天如果下雨就不出门,如果晴天就出门。);循环(上学朗读课文,老师说:把文...

    啦啦啦
  • 程序猿是如何解决SQLServer占CPU100%的

    文章目录 遇到的问题 使用SQLServer Profiler监控数据库 SQL1:查找最新的30条告警事件 SQL2:获取当前的总报警记录数 有哪些SQL语句...

    逸鹏
  • 2.6 C++程序和语句

    在前面的小节中,小林说过,一个程序包含一个或多个程序单位,每个程序单位由以下3部分组成:

    C语言入门到精通
  • 关于Java异常Exception最常见的十大问题1 受检异常 VS 非受检异常2 异常管理的最佳实践3 为什么在try语句中定义的变量不能在catch和finally语句中使用?4 为什么Doubl

    简单的说,受检异常必须在方法中被显示的捕捉,或者在方法的throws语句中被抛出。 非受检异常是由哪些在程序编译时不能被解决的问题所引起的,常见的有除以0,空...

    desperate633

扫码关注云+社区

领取腾讯云代金券