【问题标题】:Python print not working with codecsPython 打印无法使用编解码器
【发布时间】:2018-07-14 16:23:45
【问题描述】:

在我的控制台中打印来自维基百科的内容时,我不断遇到 unicode 错误。我找到了一个解决方案(在尝试使用像 Ł 这样的奇怪字符时不会让我的控制台崩溃)并且解决方案是将它放在我的主文件的顶部:

sys.stdout = codecs.getwriter('utf8')(sys.stdout.buffer)

问题是我的控制台现在不打印任何东西。只有当我中途取消我的代码运行时,它才会显示它正在打印的内容。它曾经实时更新(在我放入上面的代码 sn-p 之前),因为它从维基百科中提取信息。谁能解释如何解决此问题或替代解决方案。

澄清一下:如果没有上面的 sn-p 代码,我会收到的错误是:

UnicodeEncodeError: 'charmap' codec can't encode character '\u0141' in position 6: character maps to <undefined>

现在使用代码 sn-p 它不会实时打印任何内容,但它确实可以防止该错误。当程序最终完成时,它将一次打印所有内容-但我希望它按原样打印(就像以前一样)。我正在使用 Python 3.6.5

【问题讨论】:

  • 之前我在顶部没有那个代码 sn-p...现在它不打印任何东西,但它可以阻止我的程序崩溃。
  • 我使用的是 Python 3.6.5 版
  • 我得到:“AttributeError: '_io.BufferedWriter' 对象没有属性 'buffer'”

标签: python unicode stdout codec


【解决方案1】:

sys.stdout 是缓冲流,即输出存储在流中,直到缓冲区刷新后才输出。

print 函数将自动刷新其输出流,但如果您直接写入流(例如,sys.stdout.write('foo')),则需要显式调用其flush() 以将输出发送到控制台。

如果sys.stdout在程序执行时没有被刷新,它会在程序终止时自动刷新,如问题中所述。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-27
    • 1970-01-01
    • 2017-03-01
    • 2011-06-27
    • 1970-01-01
    • 2017-06-25
    • 1970-01-01
    相关资源
    最近更新 更多