这是检查参数值是否属于定义的值范围的正确方法吗?

2024-04-24 23:36:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用下面的“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.

对吗?你知道吗


Tags: to函数intestnoneyoufalsetrue
2条回答

如果你需要身份测试,你必须使用“is”。你的朋友是正确的,因为“in”使用平等测试。例如:

a = [0, 1]
False in a
>> True
a[0] is False
>> False

如果有人传入0,它将不会触发您的断言。你可能没想到。你知道吗

None的情况下,你的朋友是正确的;你应该始终使用身份来测试它,除非你对“无”感到满意(你几乎永远不会这样)。你知道吗

至于TrueFalse,您需要检查是否需要精确的值,或者是否只需要真实性。如果是前者,那么您可以使用in来测试它们,但是如果是后者,那么您根本不应该进行测试,当您在布尔上下文中使用它时,只需将参数传递给bool()。你知道吗

但代码中还有一个问题,你们两个都忽略了:

断言不应用于决策。

当操作会对系统产生有害影响时,应该使用断言,而不仅仅是验证输入。你知道吗

相关问题 更多 >