【问题标题】:Making assumptions about parameter types and values?对参数类型和值做出假设?
【发布时间】:2015-03-22 21:16:17
【问题描述】:

我有一点关于参数验证的风格问题。

(使用 Python)

假设我有一个带有参数a 的方法,它需要是一个 int,并且可能需要在某个范围内 - 即列表索引或其他东西。我可以使用断言/其他验证来确保这一点,但是如果我只从一个或两个地方调用该函数,并且在那里将参数验证为正确的值/类型怎么办?也许将来可以从其他地方调用该函数,但目前,“基本上”不可能传递无效参数。

感觉没有必要将验证代码添加到并不真正需要它的东西上,但如果从其他地方调用该函数以引发未捕获的错误,这似乎也很草率。

对不起,如果这太抽象了 - 我希望答案可能只是“视情况而定”,但我很好奇是否对此达成了普遍共识。

【问题讨论】:

  • 这真的取决于。在大多数情况下,我会保持函数简单,并使用单元测试解决可能出现的问题。对于来自“不可预测的来源”(例如用户)的参数,我可能使用“完整”验证(并使用单元测试对其进行测试)。
  • 如果用户输入会引发错误,请捕获并处理它。
  • 你有生活中的例子吗?如果不是,答案将是“视情况而定”

标签: python validation parameters


【解决方案1】:

总的来说,我认为每次调用方法时都验证输入参数并没有什么坏处,即使参数不太可能出错。在大多数情况下,计算开销可以忽略不计(例如,在我的笔记本电脑上使用 if type(x) is not int: raise TypeError 检查类型大约需要 100 ns,如果条件得到验证)。此外,就代码可维护性而言,我不确定进行条件验证是否值得(它只会让事情变得更复杂)。

当然,这也是针对特定问题的。例如,如果您有一个在循环中重复调用(例如超过一百万次)的计算关键函数,则可能值得跳过验证步骤并事先检查参数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-11
    • 1970-01-01
    • 2011-05-24
    • 2021-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多