Python 对参数类型和值进行假设?

Python 对参数类型和值进行假设?,python,validation,parameters,Python,Validation,Parameters,我有一个关于参数验证的风格问题 (使用Python) 假设我有一个参数为a的方法,它需要是一个int,并且可能需要在某个范围内,即列表索引或其他。我可以使用断言/其他验证来确保这一点,但是如果我只从一个或两个地方调用函数,并且参数在那里被验证为正确的值/类型,会怎么样?也许将来可以从其他地方调用该函数,但目前,传递无效参数“基本上”是不可能的 感觉没有必要将验证代码添加到真正不需要它的东西中,但如果从其他地方调用该函数,则将其保留在引发未捕获错误的位置似乎也是草率的 抱歉,如果这太抽象了-我希望

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

(使用Python)

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

感觉没有必要将验证代码添加到真正不需要它的东西中,但如果从其他地方调用该函数,则将其保留在引发未捕获错误的位置似乎也是草率的


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

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


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

这要看情况而定。在大多数情况下,我会保持函数的简单性,并通过unittests解决可能出现的问题。对于来自“不可预测源”(例如用户)的参数,我可能使用“完全”验证(也可以使用unittests进行测试)。如果用户输入可能引发错误,请捕获并处理它。您有真实的示例吗?如果不是,答案将是“视情况而定”