当前位置: 首页 > 科技观察

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

时间:2023-03-19 18:29:14 科技观察

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