【问题标题】:Raise error after unreached return statement in Python?在Python中未达到返回语句后引发错误?
【发布时间】:2013-07-02 14:53:39
【问题描述】:

相关代码:

def return_t_done(queryList):
    for item in list:
        if item[0] == "t_done":
            return int(item[1])
    raise Error("Attempted to get t_done's value, yet no t_done exists")

所以基本上这段代码运行在一个嵌套列表中

[[spam,eggs],[ham,yum]]

并查找 't_done' 的字段 ([[field,value],[field,value]]),并在找到时返回与该字段关联的值。应该总是有一个 t_done 字段,但如果没有(这是使用我没有编写的应用程序解析自动生成的日志文件并且无法访问其源代码,所以谁知道会出现什么问题)我希望以最合适的方式优雅地引发异常。

也就是说,这对我来说似乎是最优雅的方式,但我并不是特别精通 Python,而且我对文档的研究让我有点困惑。那么,我应该将 for 循环包装在 try, except 子句中吗?我应该为这个错误写一个类吗?我应该引发异常而不是错误吗?写的好吗?

谢谢!

【问题讨论】:

  • 对我来说看起来不错。您应该提出的异常类型值得商榷。
  • 你应该在这里提高ValueErrorLookupError

标签: python exception-handling error-handling


【解决方案1】:

你拥有它的方式很好。但另一种可能性是使用鲜为人知的else for for 循环原因。当且仅当 for 循环成功完成时才会评估它。

for item in list:
    if item[0] == "t_done":
        return int(item[1])
else:
    raise Error(...)

注意缩进:else 与for 对齐,不是if

【讨论】:

  • 谢谢。除了主观可读性增强之外,是否有理由添加额外的一行?有没有先例?
猜你喜欢
  • 2019-06-17
  • 1970-01-01
  • 1970-01-01
  • 2020-01-30
  • 2021-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-04
相关资源
最近更新 更多