|
|
|
|
移动端

干货来了!阿里工程师告诉你Python中异常处理的常用方法总结

异常处理在任何一门编程语言里都是值得关注的一个话题,良好的异常处理可以让你的程序更加健壮,清晰的错误信息更能帮助你快速修复问题。

作者:佚名来源:python语言|2018-01-31 22:47

技术沙龙 | 邀您于8月25日与国美/AWS/转转三位专家共同探讨小程序电商实战

干货来了!阿里工程师告诉你Python中异常处理的常用方法总结

如果你想选择一种语言来入门编程,那么Python绝对是首选!

其非常接近自然语言,精简了很多不必要的分号和括号,非常容易阅读理解。编程简单直接,更适合初学编程者,让其专注于编程逻辑,而不是困惑于晦涩的语法细节上,比起JAVA、C#和C/C++这些编程语言相对容易很多。

因此,即使是非计算机专业或者没有基础的小白,也能分分钟入门。Python的排名从去年开始就借助人工智能持续上升,现在它已经成为了第一名。

今天小编和小伙伴们分享一下异常处理的这个常用的解决方法。异常处理在任何一门编程语言里都是值得关注的一个话题,良好的异常处理可以让你的程序更加健壮,清晰的错误信息更能帮助你快速修复问题。在Python中,和不分高级语言一样,使用了try/except/finally语句块来处理异常,如果你有其他编程语言的经验,实践起来并不难。

什么是例外?

1.错误

就软件而言,错误是合乎逻辑的或合乎逻辑的。错误是合乎逻辑的或合乎逻辑的。

语法错误表明,软件的结构中存在错误,无法由解释器解释,也不能编译编译器。这些错误必须在程序执行前更正。

当程序的语法正确时,剩下的就是逻辑错误。逻辑错误可能是由于不完整或非法输入引起的;

在其他情况下,可能无法执行逻辑不能生成、计算或输出结果的过程。这些错误通常被称为域错误和范围错误。

当Python检测到错误时,Python解释器指出当前流无法继续。这时有一种反常现象。

干货来了!阿里工程师告诉你Python中异常处理的常用方法总结

2.异常

对异常的最好描述是因为程序错误,在正常控制流之外行为。

这种行为分为两个阶段:第一个是导致异常发生的错误,然后是检测(和可能的措施)阶段。

第一阶段发生在异常情况(有时称为异常)之后。

只要检测到错误并实现异常条件,解释器中就会出现异常。触发器也可以称为触发器,抛出或生成。解释器通知当前控制流有错误。

Python还允许程序员为自己创建异常。无论是Python解释器还是程序员,异常都是错误的信号。

将中断当前流以处理此错误并采取相应操作。这是第二阶段。

异常处理发生在第二阶段,在异常发生后,可以调用许多不同的操作。

您可以忽略错误(记录错误,但不采取任何措施,采取补救措施并终止程序)。或者试着在减少问题的影响后继续这个过程。

所有这些操作都代表一个延续,或者一个控制分支。关键是程序员可以在错误发生时指示程序是如何执行的。

Python使用异常对象(异常对象)来表示异常。遇到错误时会出现例外情况。

如果异常对象没有被处理或捕获,程序将终止执行,即所谓回溯(回溯)。

异常处理

语句可以用来捕获异常。

试用语句用于检测尝试语句块中的错误,以便除了语句可以捕获异常信息并处理它。

如果您不希望在异常时终止程序,请在尝试中捕获它。

Grammar:

下面是尝试的简单语法……除了…其他的:

干货来了!阿里工程师告诉你Python中异常处理的常用方法总结

尝试的工作原理是,在开始尝试语句时,Python被标记在当前程序的上下文中,这样当出现异常时,它可以返回这里。尝试子句首先执行,接下来会发生什么取决于执行中是否有异常。

  1. 如果在执行语句后执行异常,则Python会跳回去尝试并执行与异常匹配的第一个除外子句。在处理异常之后,控制流将通过整个尝试语句(除非在处理异常时出现新异常)。

  2. 如果在尝试后语句中有一个异常,但是除了子句没有匹配,异常将被发送到上一个尝试或程序的顶部,这将结束程序并打印默认的错误消息。

  3. 如果在尝试子句的执行中没有例外,Python将在其他语句之后执行语句(如果有其他的话),然后通过整个尝试语句控制流。

使用except而不带任何异常类型

除例外类型外,您可以使用,如下所示:

上面的尝试除了语句捕获所有已经发生的异常。但这不是通过程序识别特定异常信息的好方法。因为它捕获了所有异常。

使用except而带多种异常类型

您还可以使用同一个语句来处理多个异常信息,如下所示:

try-finally 语句

最后一个语句执行最后一个代码,不管是否有异常。

干货来了!阿里工程师告诉你Python中异常处理的常用方法总结

当一个异常被抛出尝试块时,最后块代码立即执行。

在最后一个块中的所有语句执行后,再次触发异常,执行除块代码之外的执行。

参数的内容与异常不同。

下面举个例子:

干货来了!阿里工程师告诉你Python中异常处理的常用方法总结

总结如下:

  1. 除了陈述之外,没有必要,最后的陈述是没有必要的,但两个必须有一个,否则没有尝试的意义。

  2. 除了声明之外,还有不止一种说法。Python将按照除语句外的顺序匹配指定的异常。如果处理异常,则稍后将不进入该例外声明。

  3. 除了语句可以以元组的形式以元组的形式指定多个异常,还可以看到实例代码。

  4. 如果在例外语句之后没有指定异常类型,默认情况下会捕获所有异常,并且可以通过日志记录或sys模块获取当前异常。

  5. 如果你想捕获一个异常来重复它,请使用“上升”,不要带任何参数或信息在它后面。

  6. 不建议捕获和抛出相同的异常。考虑重构代码。

  7. 不建议在逻辑不明确的情况下捕获所有异常,并且可能隐藏了一个非常严重的问题。

  8. 试着更换尝试/除了内置的异常处理语句的语句,如与声明的getattr()方法。

实证案例

传递异常重新引发异常

干货来了!阿里工程师告诉你Python中异常处理的常用方法总结

在python2,为了保持异常的完整信息,你不能在添加例外对象提高当你抓住它了,否则你的跟踪信息将从这里切断。以上是重新抛出异常的最简单方法。

还可以考虑一些其他技术,例如在抛出异常之前更新异常信息。

干货来了!阿里工程师告诉你Python中异常处理的常用方法总结

Python3提高了重复传输的例外,你可以自己试试,但建议同。

Exception 和 BaseException

当我们想要捕捉的一般例外,我们应该使用异常或baseexception?我建议你看看官方文件,这两个例外有什么区别?请看他们之间的继承权。

干货来了!阿里工程师告诉你Python中异常处理的常用方法总结

从异常的层次结构,baseexception是最基本的异常类继承它,和异常。除了所有的例外,baseexception包含三systemexit例外,keyboardinterrupt和generatorexit。

看来,你的程序应该使用异常而不是baseexception当捕获所有异常,因为其他三个例外,属于高层次的例外,和合理的方式应该是Python解释器处理。

except Exception as e和 except Exception, e

代码示例如下所示:

干货来了!阿里工程师告诉你Python中异常处理的常用方法总结

在python2时代,你可以使用任何写作的上述两种风格。在Python3,你只能使用写作第一的风格,和第二形式被遗弃。第一种文字可读性更好,为了程序的兼容性和后期移植的成本,你也留下了第二种写作方式。

raise “Exception string”

将字符串作为异常抛出似乎是非常简单的方法,但这是一个非常坏的习惯。

干货来了!阿里工程师告诉你Python中异常处理的常用方法总结

如果上面的语句被抛出异常,它将是这样的。

干货来了!阿里工程师告诉你Python中异常处理的常用方法总结

这是可接受的在python2.4,但没有指定异常类型,它可能使正确捕获和处理异常的下游,导致你的程序被挂起。总之,这种文体是封建时代的不良习惯,应该扔掉。

使用内置的语法范式代替try/except

Python本身提供了许多语法范式,简化处理异常,如StopIteration异常处理的语句,让你写一个循环顺畅。

在打开文件之后,带语句自动调用关闭的文件操作。当我们编写Python代码时,当遇到这种情况时,我们应该避免尝试/排除/最后考虑。

干货来了!阿里工程师告诉你Python中异常处理的常用方法总结

例如,当我们需要访问一个不确定的属性时,您可能会编写这样的代码:

干货来了!阿里工程师告诉你Python中异常处理的常用方法总结

事实上,你可以使用一个更简单的getattr()来实现你的目标。

干货来了!阿里工程师告诉你Python中异常处理的常用方法总结

最佳实践

最好的做法不限于编程语言,而只限于一些规则,并在填充之后收获。

1.例外,您知道,避免捕捉所有异常并吞噬它们。

2.抛出的异常应该解释为什么,有时您知道异常类型不能被猜测。

3.避免在catch语句块中做一些毫无意义的事情。

4.不要使用异常来控制进程,这样您的程序就很难理解和维护。

5.如果有需要,记得使用最后释放资源。

6.如果您需要它,在处理异常后不要忘记清理或回滚。

异常的查找表

【编辑推荐】

  1. 关于程序员的搞笑但却真实无比的编程语录
  2. 编程语言简史:有人讨厌花括号,于是他发明了Python
  3. 全球开发者大调查:编程始于少年,Python 成最爱
  4. HackerRank: JavaScript人才大热 开发者却更爱Python
  5. 2018年雇主青睐的编程语言排行榜出炉,这次第一终于不是Java了!
【责任编辑:张燕妮 TEL:(010)68476606】

点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

大师品软件——软件之痛与应对之道

这并不是一本传统的技术专著,因为它并没有包含一行代码,而更像是一部技术评论。作者通过幽默诙谐而又不失辛辣的语言,从程序员、用户等多...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊