【问题标题】:Why does Python convert 0's into None objects?为什么 Python 将 0 转换为 None 对象?
【发布时间】:2026-02-18 10:20:02
【问题描述】:

我不太明白为什么 Python 会自动将函数返回给我的任何 0 转换为 None 对象。我已经用几乎所有的通用语言进行了编程,但我以前从未遇到过这种情况。我希望如果我在结果中设置 0,我会从函数中返回 0。

谁能解释一下为什么 Python 会这样做?

编辑:

为了提供更多信息,我们有一个 C++ 类的包装器,返回值类型是一个 void 指针。所以如果它返回一个值为 0 的整数,它会给我一个 None 类型。这对任何人都有意义吗?

我刚接触 Python,想弄清楚什么时候我可能期望 None 类型而不是返回值。

【问题讨论】:

  • 请给出一个可运行的例子。
  • 嗯。你在使用'return'语句吗?
  • 希望我能给出一个可运行的例子,但我不能发布我们使用的专有代码。
  • 啊。听起来您的问题实际上是关于您用于包装的任何技术(Cython?ctypes?SWIG?其他东西?),而不是关于 Python 本身。你知道这里用的是什么吗?一些示例代码也会很有帮助。
  • +plus 因为我在代码中犯了愚蠢的错误并花了一些时间来解决问题

标签: python nonetype


【解决方案1】:

我们有一个 C++ 类的包装器,返回值类型是 空指针。所以如果它返回一个值为 0 的整数,它 给我一个 None 类型

0 是 C++ 中 NULL 指针的值(尽管您应该将其称为 NULL)。

如果您有一个返回 void* 类型的 C++ 函数并且您返回 0,那么您实际上是在返回 NULL,因此您在 Python 中返回的是 None

您可能对此问题感兴趣:Do you use NULL or 0 (zero) for pointers in C++?(也请参阅nullptr)。

【讨论】:

  • 哈哈,嗯……谢谢你的信息,真不敢相信我没想到
【解决方案2】:

只是一个疯狂的猜测,但如果你正在做这样的事情:

def gives_none()
    #does stuff
    0

你没有意识到 python 需要一个显式的 return 语句。虽然有些语言会在这里返回零,但这不是 Python 的工作方式。如果没有明确的 return 语句,您的函数将返回 None。试试:

def works():
    #does stuff
    return 0

【讨论】:

    【解决方案3】:

    Python 不像 Java 那样强制执行返回类型,因此实际上“很容易”忘记在函数末尾添加 return 语句。这将导致函数返回 None。

    【讨论】: