我正在编写一组内部使用的python模块。我正在让用户传递所需的微妙不同参数类型的问题。
例如,如果某些东西需要列表列表,并且给出了一个元组列表,它可能大部分时间都可以工作,直到函数尝试分配给它希望成为列表的元素。
我遇到的问题是,有时需要很长时间才能使功能达到事情开始出错的程度,并且当它们完成所有操作时,必须从头开始重新启动。
我如何测试以查看x[0][0]=null
或x.myfunc(a,b)
之类的内容是否有效
让它快速失败(如果失败)。
请注意,我希望保留代码的鸭子类型,因此isinstance()
和代码不起作用(或者至少我不知道如何)
答案 0 :(得分:0)
如果你写了foo
,那么也写foo_check
,它接受与foo
相同的参数,但只检查参数,做的很少,并试图保持不变。尝试使其如果foo
崩溃,那么foo_check
也会崩溃。让foo_check
执行以下操作:
temp = x[0][0]
x[0][0] = temp
x[0].append('xxx')
x[0].pop()
基本上,无论foo在语法上如何处理参数,foo_check
都应该执行一次(如果合适,再次撤消)。您可能需要检查对象是字符串还是列表。要做到这一点,做任何foo
如果给出错误的类型会崩溃。
如果您的foo
拨打了bar
,请foo_check
拨打bar_check
。将foo
重命名为foo_optimized
,并为您的用户提供新的foo
,只需拨打foo_check
和foo_optimized
。
输入您的文档,例如"您的对象x
应该有一个方法myfunc
采用两个参数,当被称为x.myfunc(-1, [])
时,它们将无误地运行但不执行任何操作。"尝试选择null参数,以便大多数用户可以自然地提供以这种方式工作的函数。然后,您的foo_check
可以调用x.myfunc(-1, [])
,这样您至少可以知道x.myfunc
在使用两个参数调用时是否可以编译。