Skip to main content
 首页 » 编程设计

python之Python 陷阱 : Stray comma at end of simple assignment

2025年05月04日10pander-it

<分区>

我刚刚花了一天的大部分时间来查找由赋值语句末尾的杂散逗号引起的错误。发现我的 bug 的难度因捕获异常的第三方回调库而加剧,但这让我想知道为什么 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 风格。