Python 2.7中打印值相同但`a==aa`判断不相等的问题排查
问题分析与解决:看似相同的字符串判断不相等
这情况我碰到过好多次!明明打印出来都是28,类型也都是<type 'str'>,但==判断却返回False,核心原因几乎都是字符串里藏着你看不见的隐藏字符,或者是一些肉眼无法区分的特殊字符。
可能的原因及排查方法
隐藏空白字符(最常见):比如其中一个字符串前后有空格、换行符
\n、制表符\t或者回车符\r,这些字符打印的时候不会显示,但会导致字符串实际内容不同。
你可以用repr()函数来查看字符串的“真实面目”,修改调试代码:print repr(a) print repr(aa)如果输出是
'28 '和'28',或者'28\n'和'28',那就能一眼看到差异了。字符串长度不一致:直接打印两个字符串的长度,看看是否相同:
print len(a), len(aa)如果一个长度是2,另一个是3,那说明其中一个字符串多了额外字符。
编码或特殊字符问题:Python 2里的
str是字节串,如果两个字符串的编码不同(比如一个带UTF-8 BOM,或者包含不可见的控制字符),也会导致判断不相等。这种情况同样可以用repr()来排查。
快速解决方案
如果确认是空白字符导致的,可以用strip()方法去除字符串前后的空白字符后再比较:
if aa.strip() == a.strip(): print "same" else: print "Not same"
如果是其他特殊字符,需要根据repr()的结果针对性处理,比如替换掉特定的控制字符。
内容的提问来源于stack exchange,提问作者Dinesh
相关产品推荐
相关产品推荐

