Python异常对代码运行性能影响的实例分析方法
Python的异常处理能力非常强大,但是用不好也会带来负面影响。我也喜欢在编写程序的过程中使用异常。虽然用防御的方式编码会更好,但是交给异常处理会起到偷懒的作用。我偶尔会想异常处理会对性能有多大影响,所以今天试着测试了一下。
Python异常(谷歌开源风格指南)
提示:
允许有例外,但必须小心。
定义:
异常是跳出代码块的正常控制流来处理错误或其他异常情况的一种方式。
优势:
正常操作代码的控制流不会和错误处理代码混在一起。当某个条件发生时,它还允许控制流跳过多个帧。比如一步跳出n个嵌套的函数,而不继续执行错误的代码。
缺点:
这可能会导致混乱的控制流。调用库的时候很容易漏掉错误的情况。
结论:
例外情况必须符合某些条件:
像这样触发异常:引发MyException(错误消息)或引发MyException。不要使用两个参数(引发MyException,错误消息)或过期字符串异常(引发错误消息)的形式。
模块或包应该定义自己的特定于域的异常基类,该基类应该从内置的异常类继承。模块的异常基类应该叫做“Error”。
1
2
班级
错误(异常):
及格
永远不要使用except:语句来捕获所有异常,也不要捕获异常或StandardError,除非您计划重新触发异常,或者您已经在当前线程的最外层(记得打印一条错误消息)。Python对异常非常宽容,除了:它真的捕捉任何错误,包括Python语法错误。使用except:很容易隐藏真正的bug。
尝试减少try/except块中的代码量。try块越大,就越容易触发意外的异常。在这种情况下,try/except块将隐藏真正的错误。
使用finally子句执行应该执行的代码,而不管try块中是否有异常。这通常对清理资源很有用,比如关闭文件。
捕捉异常时,使用as而不是逗号。例如
1234
尝试
上升
错误
除...之外
错误为错误:
及格
设计实验模式
拿一个相对简单直观的控制实验来说。
首先,定义一个装饰器来计算每个函数执行所需的时间:
12345678910
极好的
定时器(功能):
进口
时间
极好的
包装(*
参数,
*
*
kwargs):
开始时间
=
time.time()