在python中使用try-except的代价是什么?

在python中使用try-except的代价是什么?,python,performance,try-except,Python,Performance,Try Except,我正在读取一个文件,并使用try-catch来捕获数据可能不是我要查找的类型的情况: for w in text.readlines(): try: new = float(w.split()[3].replace(',', '.')) if new < temp and w.split()[1][3:5] == '12': temp = new date = w except ValueErr

我正在读取一个文件,并使用try-catch来捕获数据可能不是我要查找的类型的情况:

for w in text.readlines():
    try:
        new = float(w.split()[3].replace(',', '.'))
        if new < temp and w.split()[1][3:5] == '12':
            temp = new
            date = w
    except ValueError:
        ''
    except IndexError:
        ''
text.readlines()中w的
:
尝试:
new=float(w.split()[3]。替换(',','))
如果新的

这确实是一个黑客解决方案,不是我会使用的东西,只是我写的东西,因为我需要快速访问一些数据。然而,如果我想解析一个非常大的文件或流,这样的解决方案(修改后的调用会更加智能化等)是可行的,还是应该选择其他解决方案。我的主要问题是关于try-catch的性能,这是一个昂贵的操作吗?是否有良好的try-catch使用指南?希望这个问题不要太宽泛。如果是,请关注我的示例。

我不能说太多,因为我不是专家,但最好使用
尝试,除非在任何编码语言中,代码可能会产生一些错误,或者在python词汇表中
规则清楚地说明了这一点

请求原谅比允许更容易。这种常见的Python编码风格假设存在有效的键或属性,如果假设为false,则捕获异常。这种简洁快速的风格的特点是有许多尝试和例外的陈述。这种技术与许多其他语言(如C语言)所共有的LBYL风格形成对比

text.readlines()中w的
:
尝试:
new=float(w.split()[3]。替换(',','))
如果新的
在您给出的特定示例中,您可以轻松地测试并避免索引器的情况,因此我将进行该测试。ValueError更难检查,因此您应该捕获异常

for w in text:
    words = w.split()
    if len(words) >= 4:
        try:
            new = float(words[3].replace(',', '.'))
            if new < temp and words[1][3:5] == '12':
                temp = new
                date = w
        except ValueError:
            pass
对于文本中的w:
words=w.split()
如果len(字)>=4:
尝试:
new=float(字[3]。替换('、'、'))
如果新的
不要在文件上使用
readlines()
,您应该在文件上迭代


一个很好的经验法则,当它同样容易检查之前或处理异常时,要考虑异常会被抛出的频率。如果在正常情况下,异常很少触发,那么只需处理它,另一方面,如果它是常见情况,那么最好避免抛出它。因为我对您的数据一无所知,我不知道有多少行的字段少于4个,所以在这种情况下,选择是非常随意的。

惯用python就是这样。请求原谅而不是允许。但是用
通过
而不是
'
来表示“什么也不做”!此外,如果案例之间没有差异,则可以
除(ValueError,indexer):
。您应该力求使
try
块尽可能短。@AndrewJaffe感谢您的提醒。我通常在我的设计中使用pass,但正如我所提到的,这是非常快速和肮脏的,只是想非常快速地获取一些数据。当没有特别的理由期望出现杂项异常并且没有对其进行特定处理时,捕获和忽略
异常是一个坏主意。@Duncan感谢您的考虑,我只是想解释一下,OP并没有说当异常捕获时该怎么办。我的坏消息。有趣的消息:在Python2.x中,异常不必派生自
BaseException
。您还可以
创建一个旧式类。感谢您的回答,以及关于迭代该文件的提示。我知道你有点像python专家,能给我指出一些好的资源/链接吗?成为一个更好的python程序员?我有Java和C的背景。
for w in text:
    words = w.split()
    if len(words) >= 4:
        try:
            new = float(words[3].replace(',', '.'))
            if new < temp and words[1][3:5] == '12':
                temp = new
                date = w
        except ValueError:
            pass