【问题标题】:Why isn't python printing statement above infinite loop?为什么python打印语句不在无限循环之上?
【发布时间】:2020-04-21 07:40:25
【问题描述】:

这段代码的输出只是bb。我想知道为什么没有打印cc,这意味着没有执行第三行,即print("cc")。 这是链接 - https://ideone.com/M7LyS3

print("bb")
s2=input()
print("cc")
while 0>-50:
    pass
print("qq")

输入 = 5

【问题讨论】:

  • 您的帖子肯定需要更多关注,仅供参考,我无法复制您所说的内容。
  • 这是python代码。并且只执行第一个打印语句。 print("cc") 不是
  • 第2行等你输入内容
  • 可能您没有在第 2 行提供预期的输入。我在控制台上尝试了您的代码,并在提供输入后打印了“cc”
  • 这可能是一个缓冲问题,尽管如果输出到终端,那么它应该是行缓冲的,所以在输入输入字符串后你应该看到cc。您可以通过在print("cc") 之后添加sys.stdout.flush() 来测试它。

标签: python python-3.x printing


【解决方案1】:

print 默认不刷新。在这里,您的第一个打印排队,然后在您调用input() 时刷新。第二次打印已排队,但从未刷新。

如果您添加可选的 flush 参数,您将获得您期望的行为:

print("bb", flush = True)
s2=input()
print("cc"", flush = True)
while 0>-50:
    pass
print("qq"", flush = True) # Will never happen because of the infinite loop, though

【讨论】:

    【解决方案2】:

    尝试在此在线编译器中复制您的代码: https://www.onlinegdb.com/online_python_compiler

    它按您的预期工作。

    它没有在您的机器上打印cc 的原因可能是由于打印输出的缓冲区的某些问题或竞争条件。程序在那个无限循环中忙碌,并且正在保存要写入终端/控制台的缓冲区。

    【讨论】:

    • 那是垃圾,不涉及竞争条件。这是标准输出缓存,除非您刷新输出,否则在程序正确结束之前不会显示输出缓冲区。当程序终止时,您会期望 stdout 输出仍会出现。不知何故,IDEONE 并非如此,也许它会在终止停滞的程序之前捕获输出。
    【解决方案3】:

    代码运行良好:

    print("bb")
    s2=input()
    print("cc")
    while 0>-50:
        pass
    print("qq")
    

    输出:

    bb
    my_input
    cc
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-18
      • 1970-01-01
      • 1970-01-01
      • 2019-12-23
      • 1970-01-01
      • 2015-06-12
      • 2012-12-12
      • 2017-10-13
      相关资源
      最近更新 更多