我正在制作一个GUI,我发现自己要使用很多try
except
语句。我的问题是,我应该重新设计我的程序以使用较少的try
except
语句,还是try
except
在python程序中使用的好习惯?我喜欢他们,因为他们提供了丰富的信息,让我更容易调试。只是想知道真正的开发人员对它的看法。
由于
答案 0 :(得分:7)
Python的一个习语是:It's easier to ask for forgiveness than for permission.(Python词汇表,看看EAFP)。
因此,使用异常处理来构建程序流是完全可以接受的(与其他语言相比,也相当快)。它非常符合Python的动态性质。
答案 1 :(得分:4)
在决定是否捕获异常时,一个重要的考虑因素是您可能隐藏的合法错误。
例如,请考虑以下代码:
try:
name = person['name']
except KeyError:
name = '<none provided>'
如果已知person
为dict
,这是合理的......但如果person
可能更复杂,例如:
class Person(object):
def __getitem__(self, key):
return do_something(key)
您冒着意外捕获由合法错误导致的异常的风险(例如,do_something
中的错误)。
我觉得有必要提一下:你应该never, ever (except under a couple of very specific circumstances) use a "naked" except:
。
我个人的偏好是尽可能避免捕获异常(例如,使用name = person.get('name', '<none provided>')
),因为我觉得它更干净而且我不喜欢try / catch块的外观。
答案 2 :(得分:2)
很难就是否应该使用较少的异常处理给出一般答案......你绝对可以做得太多而且太少。捕获每个可能的异常几乎肯定是错误的,并且几乎肯定错误的是不进行异常处理。
以下是需要考虑的一些事项:
有关更多信息,请在Google上搜索“异常处理指南”。您看到的许多结果将用于其他语言/环境,但这些概念也适用。