python - 检查传递的参数在 Python 中是否有效的最佳方法是什么?

标签 python exception types parameters

<分区>

过去一年我一直在 Java 工作,我使用 assert 来确保传递到方法中的参数满足某些先决条件。我想在 Python 中做同样的事情,但我读到 here异常比断言更好用。

这是我目前拥有的:

if type(x) == List:
    x = np.array(x)
else:
    err = ("object passed for x is not a numpy.ndarray or a list")
    assert type(x) is np.ndarray, err
err = ("object passed for n is not an integer")
assert type(n) is IntType, err
err = ("the size of the object passed for x does not equal "
       "n squared")
assert x.size is n**2, err

是否有更优雅和/或 Pythonic 的方法来解决这个问题?我是否应该编写自己的异常类以在传递无效参数时引发?

最佳答案

不要限制自己

您有时会惊讶于许多函数、类等产生有用的输出,输入的类型比原作者预期的更多样化,只要它与原始类型足够相似即可。不要限制以后但不可预见的代码使用。这被称为 EAFP-Apporach .

因此,仅在您知道代码会产生无意义结果的地方进行测试。

断言并不总是有效

此外,当您禁用断言 (python -O) 时,assert 将不会执行任何操作。

关于python - 检查传递的参数在 Python 中是否有效的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30531337/

相关文章:

python - 判断host是否为localhost

python - PNG block 类型代码位 #5

python - 如何在 TensorFlow 中堆叠两个模型以创建新模型?

exception - 在函数式编程中什么时候抛出异常合适

java - 这是使用 IllegalArgumentException 的正确方法吗?

swift - 为什么 type(of :) return Metatype, 而不是 T.Type?

python - 强制 pandas .iloc 返回单行数据框?

java - 手动设置 HttpStatus 时 @ExceptionHandler 失败

TypeScript - [string] 与 string[]

haskell - 任意多个不同类型列表的笛卡尔积