捕获和重新抛出异常的替代方法

时间:2017-02-09 17:25:32

标签: python python-3.x exception-handling

我遇到了这样做的需要:

try:
    prop_file = next(file for file in os.listdir(data_folder) if 'property' in file)
except StopIteration:
    raise StopIteration('The property file could not be found in the specified folder ({})!'.format(data_folder))

这看起来有点傻,因为我只是为了重新抛出它而捕获异常,但这一次有更多信息丰富的反馈。

是否有替代方案,或者这被视为标准做法?

2 个答案:

答案 0 :(得分:3)

SELECT REPLACE('##RecipientFirstName##', 'RecipientFirstName',(SELECT p.FirstName FROM dbo.Person p WHERE p.PersonId = 16)) FROM dbo.MessageTypeGlobal mtg WHERE mtg.MessageTypeGlobalId = 1 看起来不合适。

在这种情况下,您可以StopIteration返回next

None

答案 1 :(得分:1)

我建议的唯一调整是使用from中的raise子句将它们链接起来。在当前设置中,当您可能希望通知用户/开发人员从哪个完全行发生错误时,异常回溯指向raise语句(想想一下try的正文包含许多陈述。

您可以添加小调整:

try:
    prop_file = next(file for file in os.listdir(data_folder) if 'property' in file)
except StopIteration as e:
    msg = 'The property file could not be found in the specified folder ({})!'
    raise StopIteration(msg.format(data_folder)) from e

除此之外,我个人认为在野外没有其他替代品,即使我不能说这是"标准"这不是一件坏事,你总是希望你的例外能够提供信息。