【问题标题】:Why does print() print an empty tuple instead of a newline? [closed]为什么 print() 打印一个空元组而不是换行符? [关闭]
【发布时间】:2016-06-23 05:23:30
【问题描述】:

错误是由拼写错误引起的。请将此问题标记为离题。

我对以下几行有点问题。

from __future__ import print_function
print()

如果我打开我的 Windows CLI 并运行它,它会按预期运行。

当我将它粘贴到程序中并执行它时,它不是简单地打印换行符,而是打印()

以前有人遇到过这种情况吗?

其他详情:

如果我只用这两行代码运行一个程序,它就会按预期运行。

但由于某种原因,在我的程序中print() 打印出()。如果我用print(1) 替换该行,它会打印出1

在 64 位 Windows 8 上运行。 Python 2.7.11 (v2.7.11:6d1b6a68f775)

最小、完整且可验证的示例:

class A:
    def f(self):
        print()

if __name__ == '__main__':
    a = A()
    a.f() 

最终更新:

天哪!!!!我是个白痴。

我有一个具有未来导入的驱动程序,但类(这是另一个文件)没有!我确实有print('abc', file=sys.stderr)之类的语句,但是它们没有被执行,所以程序运行没有问题。

我上面的例子实际上运行良好。我正在运行的示例没有导入。我正在编辑的文件(否则是示例的精确副本)确实如此。

糟糕!!!!

【问题讨论】:

  • 它只是在我的控制台中打印一个换行符。我没有得到一个空元组。我在一台 Windows 机器上,如果它有所作为的话。
  • 我无法在 python 2.7 上重现这个,我也在 Windows 上。顺便说一句,你不需要这个类中的构造函数,从object子类化是一个好习惯(虽然这个特定的类不是必需的)
  • 在 Python 2.7.x print() 返回一个元组,但在 python 3.5.x print() 返回一个换行符。你检查过你的 Python 版本了吗?
  • 不。 Win7、i3、HP lappy - 在运行脚本或从命令行输入的 IDLE、CLI 或 PowerShell 中看不到此行为。 FWIW,当我在没有 future 导入的情况下运行您的可验证示例时,正如您所期望的那样,我确实打印了一个“()”...
  • 即使使用导入,该代码也只会为我打印一个空行。 Python 2.7.11,Arch Linux x64。

标签: python python-2.7 printing


【解决方案1】:

print是python2中的特殊语句。

当你这样做时:

from __future__ import print_function
print()

您实际上调用的是print function,它的行为与python3中的行为相同。

在您的程序中,您调用的是语句,而不是函数。因此,print() 打印一个空元组(这确实是 () 的内容)。

补充说明:

如果我在您的示例开头添加from __future__ import print_function,我会按预期得到一个换行符,而不是一个空元组。

【讨论】:

    【解决方案2】:

    在您的第二个程序 python myprog.py 中,您需要包含 from __future__ import print_function 行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-13
      • 2023-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多