为什么Python在print()输出之前将异常打印到控制台

沃尔夫

我正在编写一个相当长的函数,该函数读取CSV文件并循环遍历各行,并检查它们是否符合预期格式,如果发现行格式不正确,则会引发异常。

对于期望格式的每一行,它会向控制台打印一条消息(使用打印功能),表明该行有效。否则将引发错误。

我希望看到的是一系列消息,说前X行是有效的,如果遇到错误,则后面跟一个异常,但是先打印异常,然后再打印消息,尽管事实上它们是从先前的迭代中调用的的循环。

谁能解释为什么这会是我无法解决问题的原因?

以我创建的这个简短的基本示例为例:

letters = ['a','b','c']
for letter in letters:
    if letter == 'a' or letter == 'c':
        print ("Valid letter, '" + letter + "' found. Keep going.")
    else:
        raise Exception("Invalid letter, '" + letter + "' found. Break program.")

它产生以下输出:

>>> >>> ... ... ... ... ... Traceback (most recent call last):
  File "<stdin>", line 5, in <module>
Exception: Invalid letter, 'b' found. Break program.
Valid letter, 'a' found. Keep going.
>>> 

我想要的是首先打印消息,因为它们出现在代码中,而异常要在代码停止时最后打印,否则,它会在大量打印消息中丢失。它似乎仅用于循环(如果在循环之前打印某些内容,则会在异常之前打印出来)。谁能提供任何见解?

让·弗朗索瓦·法布尔

通过标准错误流而不是标准输出来打印异常取决于终端,两个输出并不总是同步的。

您可以在打印后刷新输出:

print ("Valid letter, '" + letter + "' found. Keep going.",flush=True)

另一种选择是为消息写入标准错误,如果您打算将输出重定向到文件而不考虑消息,这不是一个坏主意

sys.stderr.write("Valid letter, '{}' found. Keep going.\n".format(letter))

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将python控制台输出打印到Qtextedit

Python:在其他输出之前记录打印到控制台的注释

为什么异常方法的 printstacktrace() 在调用时不打印到控制台?

为什么这个并行过程不将输出写入文件,而是打印到控制台?

将输出打印到Chrome控制台

为什么不将此行打印到控制台?

为什么这些goroutine无法打印到控制台?

为什么Mybatis Force将log4j DEBUG信息打印到控制台

为什么Gson会漂亮地打印到控制台,而不打印到文件?

为什么 MySQL 在打印到控制台/重定向到文件时会有不同的输出

C ++:在输出之前无法删除已经打印到控制台的字符

通过批处理文件运行时,将python脚本的输出打印到Windows控制台

通过批处理文件运行时,如何将python脚本的输出打印到Windows控制台?

For 循环在操作实际发生之前将日志打印到控制台

为什么将这个chai-as-promise AssertionError打印到控制台,但不打印到我的Mocha测试运行程序?

C++:将动态分配的数组打印到控制台,行为异常

为什么 clear_output() 不清除 VS 代码中打印到 python 控制台的内容?

DBeaver + Postgres:调试功能打印到输出/控制台

XmlWriter打印到控制台时输出意外的编码

在Codeception中将调试输出打印到控制台

使用 KafkaStream Processor API 时将输出打印到控制台

如何使用ImageMagick“转换”工具将输出文件名打印到控制台?

用于在不同线程上同时将输出打印到控制台和文件的命令

如何使用Visual Studio将Unicode打印到C中的输出控制台?

如何运行“ ls”,然后将输出打印到控制台?

Java IO-从控制台将递归函数的输出打印到.txt文件

将控制台输出打印到文本文件

重新启动后,为什么我的守护进程无法打印到控制台?

为什么Java中的System.out.println()打印到控制台?