- A+
如果你想选择一种语言来入门编程,那么Python绝对是首选!
其非常接近自然语言,精简了很多不必要的分号和括号,非常容易阅读理解。编程简单直接,更适合初学编程者,让其专注于编程逻辑,而不是困惑于晦涩的语法细节上,比起JAVA、C#和C/C++这些编程语言相对容易很多。
因此,即使是非计算机专业或者没有基础的小白,也能分分钟入门。Python的排名从去年开始就借助人工智能持续上升,现在它已经成为了第一名。
今天小编和小伙伴们分享一下异常处理的这个常用的解决方法。异常处理在任何一门编程语言里都是值得关注的一个话题,良好的异常处理可以让你的程序更加健壮,清晰的错误信息更能帮助你快速修复问题。在Python中,和不分高级语言一样,使用了try/except/finally语句块来处理异常,如果你有其他编程语言的经验,实践起来并不难。
什么是例外?
1。错误
就软件而言,错误是合乎逻辑的或合乎逻辑的。错误是合乎逻辑的或合乎逻辑的。
语法错误表明,软件的结构中存在错误,无法由解释器解释,也不能编译编译器。这些错误必须在程序执行前更正。
当程序的语法正确时,剩下的就是逻辑错误。逻辑错误可能是由于不完整或非法输入引起的;
在其他情况下,可能无法执行逻辑不能生成、计算或输出结果的过程。这些错误通常被称为域错误和范围错误。
当Python检测到错误时,Python解释器指出当前流无法继续。这时有一种反常现象。
2。异常
对异常的最好描述是因为程序错误,在正常控制流之外行为。
这种行为分为两个阶段:第一个是导致异常发生的错误,然后是检测(和可能的措施)阶段。
第一阶段发生在异常情况(有时称为异常)之后。
只要检测到错误并实现异常条件,解释器中就会出现异常。触发器也可以称为触发器,抛出或生成。解释器通知当前控制流有错误。
Python还允许程序员为自己创建异常。无论是Python解释器还是程序员,异常都是错误的信号。
将中断当前流以处理此错误并采取相应操作。这是第二阶段。
异常处理发生在第二阶段,在异常发生后,可以调用许多不同的操作。
您可以忽略错误(记录错误,但不采取任何措施,采取补救措施并终止程序)。或者试着在减少问题的影响后继续这个过程。
所有这些操作都代表一个延续,或者一个控制分支。关键是程序员可以在错误发生时指示程序是如何执行的。
Python使用异常对象(异常对象)来表示异常。遇到错误时会出现例外情况。
如果异常对象没有被处理或捕获,程序将终止执行,即所谓回溯(回溯)。
异常处理
语句可以用来捕获异常。
试用语句用于检测尝试语句块中的错误,以便除了语句可以捕获异常信息并处理它。
如果您不希望在异常时终止程序,请在尝试中捕获它。
Grammar:
下面是尝试的简单语法……除了…其他的:
尝试的工作原理是,在开始尝试语句时,Python被标记在当前程序的上下文中,这样当出现异常时,它可以返回这里。尝试子句首先执行,接下来会发生什么取决于执行中是否有异常。
-
如果在执行语句后执行异常,则Python会跳回去尝试并执行与异常匹配的第一个除外子句。在处理异常之后,控制流将通过整个尝试语句(除非在处理异常时出现新异常)。
-
如果在尝试后语句中有一个异常,但是除了子句没有匹配,异常将被发送到上一个尝试或程序的顶部,这将结束程序并打印默认的错误消息。
-
如果在尝试子句的执行中没有例外,Python将在其他语句之后执行语句(如果有其他的话),然后通过整个尝试语句控制流。
使用except而不带任何异常类型
除例外类型外,您可以使用,如下所示:
上面的尝试除了语句捕获所有已经发生的异常。但这不是通过程序识别特定异常信息的好方法。因为它捕获了所有异常。
使用except而带多种异常类型
您还可以使用同一个语句来处理多个异常信息,如下所示:
try-finally 语句
最后一个语句执行最后一个代码,不管是否有异常。
当一个异常被抛出尝试块时,最后块代码立即执行。
在最后一个块中的所有语句执行后,再次触发异常,执行除块代码之外的执行。
参数的内容与异常不同。
下面举个例子:
点击放大
总结如下:
-
除了陈述之外,没有必要,最后的陈述是没有必要的,但两个必须有一个,否则没有尝试的意义。
-
除了声明之外,还有不止一种说法。Python将按照除语句外的顺序匹配指定的异常。如果处理异常,则稍后将不进入该例外声明。
-
除了语句可以以元组的形式以元组的形式指定多个异常,还可以看到实例代码。
-
如果在例外语句之后没有指定异常类型,默认情况下会捕获所有异常,并且可以通过日志记录或sys模块获取当前异常。
-
如果你想捕获一个异常来重复它,请使用“上升”,不要带任何参数或信息在它后面。
-
不建议捕获和抛出相同的异常。考虑重构代码。
-
不建议在逻辑不明确的情况下捕获所有异常,并且可能隐藏了一个非常严重的问题。
-
试着更换尝试/除了内置的异常处理语句的语句,如与声明的getattr()方法。
实证案例
传递异常重新引发异常
在python2,为了保持异常的完整信息,你不能在添加例外对象提高当你抓住它了,否则你的跟踪信息将从这里切断。以上是重新抛出异常的最简单方法。
还可以考虑一些其他技术,例如在抛出异常之前更新异常信息。
Python3提高了重复传输的例外,你可以自己试试,但建议同。
Exception 和 BaseException
当我们想要捕捉的一般例外,我们应该使用异常或baseexception?我建议你看看官方文件,这两个例外有什么区别?请看他们之间的继承权。
从异常的层次结构,baseexception是最基本的异常类继承它,和异常。除了所有的例外,baseexception包含三systemexit例外,keyboardinterrupt和generatorexit。
看来,你的程序应该使用异常而不是baseexception当捕获所有异常,因为其他三个例外,属于高层次的例外,和合理的方式应该是Python解释器处理。
except Exception as e和 except Exception, e
代码示例如下所示:
在python2时代,你可以使用任何写作的上述两种风格。在Python3,你只能使用写作第一的风格,和第二形式被遗弃。第一种文字可读性更好,为了程序的兼容性和后期移植的成本,你也留下了第二种写作方式。
raise “Exception string”
将字符串作为异常抛出似乎是非常简单的方法,但这是一个非常坏的习惯。
如果上面的语句被抛出异常,它将是这样的。
这是可接受的在python2.4,但没有指定异常类型,它可能使正确捕获和处理异常的下游,导致你的程序被挂起。总之,这种文体是封建时代的不良习惯,应该扔掉。
使用内置的语法范式代替try/except
Python本身提供了许多语法范式,简化处理异常,如StopIteration异常处理的语句,让你写一个循环顺畅。
在打开文件之后,带语句自动调用关闭的文件操作。当我们编写Python代码时,当遇到这种情况时,我们应该避免尝试/排除/最后考虑。
例如,当我们需要访问一个不确定的属性时,您可能会编写这样的代码:
事实上,你可以使用一个更简单的getattr()来实现你的目标。
最佳实践
最好的做法不限于编程语言,而只限于一些规则,并在填充之后收获。
1。例外,您知道,避免捕捉所有异常并吞噬它们。
2。抛出的异常应该解释为什么,有时您知道异常类型不能被猜测。
三.避免在catch语句块中做一些毫无意义的事情。
4。不要使用异常来控制进程,这样您的程序就很难理解和维护。
5。如果有需要,记得使用最后释放资源。
6如果您需要它,在处理异常后不要忘记清理或回滚。
异常的查找表