【问题标题】:If statement returning the wrong value?如果语句返回错误的值?
【发布时间】:2011-07-11 21:31:14
【问题描述】:

Python 中的 if 语句计算并返回非预期值。

p = sub.Popen('md5.exe -n md5.exe',stdout=sub.PIPE,stderr=sub.PIPE)
md5, errors = p.communicate()
print md5
abc = "8D443F2E93A3F0B67F442E4F1D5A4D6D"
print abc
if md5 == abc: print 'TRUE'
else: print 'FALSE'

repr(md5)'8D443F2E93A3F0B67F442E4F1D5A4D6D\r\n'

这两个字符串是相同的,但它会计算并打印FALSE

这里发生了什么,如何解决?

【问题讨论】:

  • print repr(md5)print repr(abc),然后用每次打印的输出更新问题。
  • 尝试在第 3 行打印 repr(md5)。您确定它们是一样的吗?
  • 你能做到吗:我想某处有换行符或类似的东西。试试:md5.strip() == abc。否则,运行print repr(md5) 并回发
  • 请用每个打印语句的输出更新问题。请包括两个输出。请更新问题。 “两个字符串相同”的说法是错误的。
  • 如果您的目标不是了解子流程模块的工作原理,您可能需要查看hashlib

标签: python string if-statement


【解决方案1】:

您的 md5 包含尾随空格,而 abc 值没有。大多数命令行程序都以换行符结尾,因为它可能会干扰 shell 用户不要这样做。可以将其输出到standard error 流,以免干扰像您这样的程序,但通常不会这样做。

您可以使用字符串方法.strip() 删除字符串开头和结尾的所有空格。例如,

md5 = md5.strip()

如果您使用的是 Python 3,则可能会导致相同的错误,因为 Subprocess 对象的 .communicate() 方法返回不等于任何字符串的 bytes 对象。

【讨论】:

  • 它们不是空格。这是一个 Windows 换行符。
  • @phant0m:windows换行符是两个字符,一般概括为“空格”。
  • @S.Lott 我最初使用的只是说“空格”。我编辑了帖子以回应他的评论。
  • @Jeremy Banks:@phant0m 的评论仍然几乎是错误的,无论问题说什么或没说什么。
  • @S.Lott:我知道这是两个字符...这就是为什么有两个转义序列...不过你说得有道理,措辞本可以更好。
猜你喜欢
  • 2015-04-13
  • 2023-03-05
  • 2018-11-17
  • 1970-01-01
  • 1970-01-01
  • 2012-07-27
  • 2014-07-10
  • 1970-01-01
  • 2013-10-06
相关资源
最近更新 更多