为什么'try-except'比此代码中的'if'慢得多?

时间:2016-09-20 17:11:47

标签: python performance exception-handling

我有几个大的以逗号分隔的数据集,其中包含浮点数(数十万),但有些值可能会丢失(通常没有丢失,或只有几百个),并使用字符串{{1标记为null }}。我想将所有值转换为实际的float类型数据,并将它们存储在列表中以供进一步处理。

我使用以下代码和"null"语句(这是更为pythonic的方式AFAIK)将字符串转换为浮点数,如果引发异常,我会检查是否由于{而引发了异常{1}}价值。如果try-except值导致异常,我只需"null"。否则,我提出异常。请记住,在典型的数据集中,没有或很少有例外。

"null"

这很好用,但我意识到,偶尔我会得到一个包含大量pass值(数千)的数据集,上面的代码需要很长时间才能执行(几分钟或几小时,相比之下)通常会在几秒钟内处理完毕!)

然后我尝试添加try: num = float(string) except ValueError: if string == "null" pass else: raise ValueError 语句,以便首先检查字符串值是否等于"null",并且只有当字符串不是if时才尝试转换float函数的字符串。在这种情况下,我将在典型数据集中进行许多冗余字符串比较,只有很少或没有"null"值:

"null"

通过以下代码示例,我测量了两种方式的执行时间,令我惊讶的是,当我添加额外的"null"语句时,我会看到,除非出现意外的非浮点字符串,否则会避免所有异常除try: if string != "null": num = float(string) except: print("String {} could not be converted to float".format(string)) raise 以外,我的代码执行得更快。

if

示例执行输出:

"null"

有人可以解释为什么会这样吗?实现这个的最佳方法是什么?

0 个答案:

没有答案
相关问题