【问题标题】:Python error - can't assign to literalPython错误 - 无法分配给文字
【发布时间】:2012-04-10 14:35:31
【问题描述】:
FileName = 'Binarydata.dat'
BinaryFile = open(FileName, 'r')
for '0' in BinaryFile:
    print('')
else:
    print('@')
BinaryFile.close() 

我在尝试运行此代码时收到错误 SyntaxError - can't assign to literal。这只是代码的一小部分。其余的工作正常。我不知道为什么这不起作用。

【问题讨论】:

  • 你到底要来这里做什么?使用 '0' 作为 for-each 变量没有特别的意义...?
  • 您要查找的是 BinaryData 中的 x:如果 x 为 0:print('')
  • I can't figure out why this is not working. 那也许你可以试试learnpythonthehardway.org

标签: python


【解决方案1】:
for '0' in BinaryFile:

你有 '0' 的地方应该是一个变量,而不是文字。

你的意思大概是:

for line in BinaryFile:
  if line == '0':
    print('')
  else:
    print('@')

【讨论】:

  • 另请注意:for x in BinaryFile: - 每个x 将是文件中的一行,而不是一个字节。
  • 除非你用 rb 而不是 r 打开文件
  • 我在问题中犯了一个错误......如果“line == 0”不会是,单个字符会是什么?是否有内置函数或者我已经分配了一个变量?
  • 虽然这不会产生错误,但程序仍然无法正常工作。二进制文件 1010110 应该更改为 @ @ @@ ,但它仍然是 1010110
  • 您可能需要遍历行中的每个字符。也许在 if 语句之前 for char in line:。您可以通过将print line 放在第一个for 之后对其进行调试。
【解决方案2】:

您可能在整个堆栈跟踪中看到如下内容:

    for '0' in BinaryFile:
SyntaxError: can't assign to literal

当 python 循环 BinaryFile 时,它​​会将每次迭代分配给一个变量。在这种情况下,您尝试将第一次迭代分配给“0”,这是一个字符串。

它应该看起来像这样:

    for a_variable in BinaryFile:

在这种情况下,BinaryFile 的元素将被分配给 a_variable。在下一次迭代中,下一个变量将被分配给 a_variable。

这将一直持续到对象 BinaryFile 引发 StopIteration 错误,此时迭代结束。

【讨论】:

    【解决方案3】:

    如果你正在寻找'0',那么你可以写:

    for ch in BinaryFile:
        print('' if ch == '0' else '@')
    

    记住:Python 中的 for 是一个 for-each 循环。必须有一个变量绑定在可迭代的内容上。

    【讨论】:

      猜你喜欢
      • 2020-05-05
      • 1970-01-01
      • 2023-03-12
      • 2011-11-22
      • 2017-06-27
      • 2015-03-27
      • 2015-06-22
      • 1970-01-01
      • 2020-08-25
      相关资源
      最近更新 更多