我遇到了这样做的需要:
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))
这看起来有点傻,因为我只是为了重新抛出它而捕获异常,但这一次有更多信息丰富的反馈。
是否有替代方案,或者这被视为标准做法?
答案 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
除此之外,我个人认为在野外没有其他替代品,即使我不能说这是"标准"这不是一件坏事,你总是希望你的例外能够提供信息。