我可以区分 0 和 False 吗?

-1 投票
2 回答
60 浏览
提问于 2025-04-14 17:33

我有一个代码里的函数,它会根据一些条件返回列表中的某个位置。如果这些条件为真,函数就会给我一个位置。接下来的函数会用到这个位置。这个返回的位置可能是0,但如果条件不成立,函数就会返回False。接下来的函数会检查“position是否等于false”,但我刚刚了解到,它会把0也当作false来理解。

我能区分0和False吗?其实我不想返回一个像-123456这样的数字,因为我想把代码放在我的论文里。

2 个回答

0

可能是这样的:

0 == False # True
# however...
0 is False # False
4

不要使用特殊的标记值来表示错误。如果你的函数应该返回一个索引,那它返回的每个值都应该是一个有效的索引。如果出现问题,就应该抛出一个异常来表示。

def foo() -> int:
    if <condition>:
        return computed_index()
    raise ValueError("No valid index")


try:
    position = foo()
except ValueError:
    # do whatever position == False was supposed to do

另一种做法是返回一个绝对不可能是有效索引的值,这个值的存在就是为了表示没有其他值,比如说None

def foo() -> int | None:
    if <condition>:
        return computed_index()

if (position := foo()) is None:
    handle error

...
    

撰写回答