我刚刚花了一天的大部分时间来寻找一个由赋值语句末尾的杂散逗号引起的错误。捕获异常的第三方回调库加剧了查找错误的难度,但这让我想知道为什么 Python (2.x) 不会引发语法错误而不是创建元组。考虑以下
>>> a = 1,
>>> a
(1,)
如您所见,结尾的逗号创建了一个单例元组。这并不违反 Python 语法(请参阅http://docs.python.org/reference/expressions.html#grammar-token-expression_list),但它肯定会导致一些意想不到的结果,例如
>>> a == 1,
(False,)
对比
>>> (1,) == a
True
虽然我现在明白发生了什么,但我对 Python 为什么允许这种语法而不是要求显式括号来创建元组感到困惑。在某些情况下,这种行为是必要的,或者至少是有利的? 在过去的 7 年里,我几乎只使用 Python 进行编程,而且我从来不需要以这种方式创建单例。在大多数方面,Python 是一种非常易读和明确的语言。这个特殊的“功能”似乎不是 Python 的。