显然相等的字符串在 Python 中不相等

apparently equal strings are not equal in Python

我正在使用 GitPython 编写预推送 githook。

这是一段代码:

local_ref, local_sha1, remote_ref, remote_sha1 = [line for line in sys.stdin][0].split(' ')

for i, commit in enumerate(repo.iter_commits('docs-and-config')):

    print("remote_sha1 is {}\n".format(remote_sha1), "commit.hexsha is {}\n".format(commit.hexsha))
    print(type(remote_sha1), type(commit.hexsha))
    print(commit.hexsha == remote_sha1)
    if commit.hexsha == remote_sha1:
        remote_commit = commit
    if i > 10:
        break

这是前三个迭代的结果:

 remote_sha1 is 9c5e0c813f8ac8bf95997911c7845aec935f1d43

 commit.hexsha is ad0632a1e17c03d65124154a7f1f8d7c23966fbf

<class 'str'> <class 'str'>
False



remote_sha1 is 9c5e0c813f8ac8bf95997911c7845aec935f1d43

 commit.hexsha is e63f31ba923dca63917c1ed3a9d332f9c42baf83

<class 'str'> <class 'str'>
False



remote_sha1 is 9c5e0c813f8ac8bf95997911c7845aec935f1d43

 commit.hexsha is 9c5e0c813f8ac8bf95997911c7845aec935f1d43

<class 'str'> <class 'str'>
False

为什么第三个实例不相等?我试过从两个字符串中去除空格;那没有区别。

显然,您从标准输入解析的字符串中有一个额外的 \n 字符。 尝试做: remote_sha1 = remote_sha1.strip() 在你的 for 循环的开头。

此外,如果您在调用 str.format 时使用 !r 作为呈现类型,Python 将在您的字符串周围放置 ',因此您会注意到空格那里:

print("remote_sha1 is {!r}\n".format(remote_sha1), "commit.hexsha is {!r}\n".format(commit.hexsha))