【发布时间】:2020-05-30 09:57:43
【问题描述】:
将代码从 Python 2 转换为 Python 3 时,一个问题是测试字符串和字节是否相等时的行为发生了变化。例如:
foo = b'foo'
if foo == 'foo':
print("They match!")
在 Python 3 上不打印任何内容,并且“它们匹配!”在 Python 2 上。在这种情况下很容易发现,但在许多情况下,检查是针对可能已在其他地方定义的变量执行的,因此没有明显的类型信息。
我想让 Python 3 解释器在字符串和字节之间进行相等测试时给出错误,而不是默默地断定它们不同。有没有办法做到这一点?
【问题讨论】:
-
请注意
1 == "one"也只给出False,而1 == 1.0给出True。 Python 不会将比较不同类型的值视为错误,它的语义取决于所涉及的类型。 -
是的,但至关重要的是,这些示例在 Python 2 和 Python 3 上给出了相同的答案。如果您有类似的比较,从使用 v2 解释器更改为 v3 解释器不应该默默地改变控制代码的流程。对于 byte 与 str 比较,情况并非如此。
-
我想我希望有一些解释器标志旨在帮助从 2 到 3 的转换,这些标志修改了解释器的行为,大概有一些性能成本,以帮助识别这些潜在的隐藏更新时容易遗漏的问题。
标签: python python-3.x python-2to3