我使用下面的“assert”来验证函数中的参数值 我有一个函数“test”,它接受一个布尔输入“arg1”,它可以是None、True或False。确定“arg1”只是这些可能值中的一个可以吗?你知道吗
def test(arg1=None):
assert arg1 in set([None, True, False]), "Not a valid input"
...
我的朋友告诉我:
Can't do this. You have to compare True, False, and None as identities (is not =). Doing an in is equivalent to multiple ='s. You have to maintain separate is's.
对吗?你知道吗
如果你需要身份测试,你必须使用“is”。你的朋友是正确的,因为“in”使用平等测试。例如:
如果有人传入0,它将不会触发您的断言。你可能没想到。你知道吗
在
None
的情况下,你的朋友是正确的;你应该始终使用身份来测试它,除非你对“无”感到满意(你几乎永远不会这样)。你知道吗至于
True
或False
,您需要检查是否需要精确的值,或者是否只需要真实性。如果是前者,那么您可以使用in
来测试它们,但是如果是后者,那么您根本不应该进行测试,当您在布尔上下文中使用它时,只需将参数传递给bool()
。你知道吗但代码中还有一个问题,你们两个都忽略了:
断言不应用于决策。
当操作会对系统产生有害影响时,应该使用断言,而不仅仅是验证输入。你知道吗
相关问题 更多 >
编程相关推荐