python - 如何处理动态语言中错误的参数类型?

标签 python unit-testing dynamic-languages

我找不到关于 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.Decimalfractions.Rational,它们也是有效数字。

通过“类型检查”,您将排除有效类型。您唯一可以做的就是假设类型是正确的,并在有人“滥用”您的函数或类并提供错误类型时优雅地处理异常。

处理 TypeError 的最优雅的方式?

什么都不做。该程序应该完全崩溃。

关于python - 如何处理动态语言中错误的参数类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4783257/

相关文章:

python - 在 Tkinter 中单击按钮时显示 .jpg 图像?

python - 从 Pandas DataFrame 返回单个单元格值

python - Django url 标记多个参数

unit-testing - 我们应该使用单元测试框架测试打印在控制台/命令提示符上的文本吗?

javascript - 当输入参数为空时,如何编写函数返回的 Jasmine 期望?

python - 如何创建具有属性的内联对象?

python - 需要在 blender 中自定义模型导出脚本

unit-testing - 为什么不能从其他程序集继承测试方法

java - 来自 php/ruby/python 的人玩框架的优势

c# - 学习 DLR(如何在其上实现一种语言)