每个Python函数(或方法)都应该检查其参数的有效性吗?在
不仅是类型,而且如果值在有效范围内,尺寸是否符合预期,等等?在
或者只是简单地期望其他函数、程序员等的“成人式”良好行为的函数?只需在docstring中提到预期的内容,并在面向用户的函数中检查用户输入参数的有效性?在
在“private”方法的情况下,我觉得我们不需要检查有效性,但是其他方法/函数呢?在
如果我们对这一点过于严格,并且检查了所有的东西,那么代码中难道不会充满了枯燥的decorator类型的代码吗?可以吗?在
Tags:
我见过很多不同的方法。最极端的一个是docstring包含参数类型和范围的正式声明(也包括返回值)。应用程序在运行时根据这些docstring检查参数,如果参数有问题则抛出异常。这是使用元编程实现的,可以在生产运行时禁用。在
它不再是真正的Python,ducktyping也不可能。它更像是一种没有辅助编译器的静态类型语言。你仍然需要等到它在运行时中断。在
我也看到过不做任何检查,只运行全面的单元测试的应用程序。如果他们通过了,我们假设参数也没问题。在
就我个人而言,我也用单元测试来涵盖大多数事情,但在关键部分我使用断言。我还特别注意接收用户输入的方法。在
希望有帮助
Python鼓励鸭子键入或“请求宽恕比允许更容易”(EAFP),这意味着您应该假设您的参数是正确的,如果不是,则适当地处理这种情况。
我们假设“如果它走路说话像鸭子,那它一定是鸭子”。请看这里:
如您所见,这两种类型都有效。这是故意的行为。如果遇到了一些没有定义该方法的东西,您将得到^{cd1>}的期望值。解决这一问题的方法是使用异常处理:
^{pr2}$我个人说了这些,可不总是坚持下去。例如,如果我不能保证对象的类型,那么我将使用^{{cd2>}之类的东西来正确地指导代码。如果不是,那么它将返回^{{cd3>}。
选择哪一个使代码更干净,并适合情况,这取决于您的自由裁量。有一些建议,例如“始终使用try/除了IOErrors”(这一个原因是有原因的)。
我认为这可以应用于一般情况下,而不仅仅是Python,但是我认识的所有人都遵循这样的理念:如果最坏的情况是错误消息,那么假设输入是正确的。
除非您的代码正在运行一个任务,即使您已经尽可能安全地编写它,它仍然可以销毁某些东西,在这种情况下,请始终检查。在
相关问题 更多 >
编程相关推荐