显然相等的字符串在 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))
我正在使用 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))