我找不到关于 SO 的答案,但很可能已经讨论过该论点。
我正在尝试使用 Python 语言编写一个非常小的程序。这是我对动态语言的第一次“真实”体验,我更愿意以正确的方式做每一件事。我从一开始就尝试应用的实践之一是单元测试。
如何快速测试方法的参数类型是否正确?我应该这样做吗?
对于正确的类型,我的意思是例如检查使用 float 工作的方法是否未使用字符串调用。在这种情况下,请考虑该方法显然应该接受偶数而不仅仅是 float 的可能性。
最佳答案
How can I quickly test that the parameters of a method are of the right type?
最快的方法就是什么都不做。
说真的。动态语言解释器(本例中为 Python)的检查速度比您编写的任何代码都要快得多。它只会引发异常,这就是您需要做的。什么都没有。
Should I do it?
永远不要测试正确的类型。通常,您不能这样做。
假设您有一个需要“数字”的函数
def some_func( x ):
assert isinstance(x, int)
糟糕的政策。您的函数可能适用于 long 或 float 以及 int。
assert instance( x, (int, long, float) )
糟糕的政策。你仍然排除了复杂的。实际上,您还排除了 decimal.Decimal
和 fractions.Rational
,它们也是有效数字。
通过“类型检查”,您将排除有效类型。您唯一可以做的就是假设类型是正确的,并在有人“滥用”您的函数或类并提供错误类型时优雅地处理异常。
处理 TypeError
的最优雅的方式?
什么都不做。该程序应该完全崩溃。
关于python - 如何处理动态语言中错误的参数类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4783257/