Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 打印成功,但日志记录模块引发异常_Python_Python 2.7_Logging_Encoding_Python Unicode - Fatal编程技术网

Python 打印成功,但日志记录模块引发异常

Python 打印成功,但日志记录模块引发异常,python,python-2.7,logging,encoding,python-unicode,Python,Python 2.7,Logging,Encoding,Python Unicode,我试图记录一个文件的内容,但是我从日志模块(不仅仅是那个模块)得到了一些有趣的行为 以下是文件内容: "Testing …" Testing å¨'æøöä "Testing å¨'æøöä" 下面是我如何打开并记录它的: with codecs.open(f, "r", encoding="utf-8") as myfile: script = myfile.read() log.debug("Script type: {}".format(type(scri

我试图记录一个文件的内容,但是我从日志模块(不仅仅是那个模块)得到了一些有趣的行为

以下是文件内容:

"Testing …"
Testing å¨'æøöä
"Testing å¨'æøöä"
下面是我如何打开并记录它的:

with codecs.open(f, "r", encoding="utf-8") as myfile:
        script = myfile.read()
        log.debug("Script type: {}".format(type(script)))
        print(script)
        log.debug("{}".format(script.encode("utf8")))
记录对象类型的行在我的日志中显示如下:

Script type: <type 'unicode'>
当我从最后一行中删除
.encode(“utf8”)
位时,我得到了预期的异常:

Traceback (most recent call last):
  File "/usr/lib/python2.7/logging/__init__.py", line 882, in emit
    stream.write(fs % msg.encode("UTF-8"))
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 63: ordinal not in range(128)
'ascii' codec can't encode character u'\u2026' in position 9: ordinal not in range(128)
这只是为了说明问题。这不仅仅是日志模块。我的其余代码在处理这个“unicode”字符串时也会抛出类似的异常


我做错了什么?

日志记录可以很好地处理Unicode值:

>>> import logging
>>> logging.basicConfig(level=logging.DEBUG)
>>> script = u'"Testing …"'
>>> logging.debug(script)
DEBUG:root:"Testing …"
(写入日志文件将产生UTF-8编码的消息)

出错的地方是在使用
str.format()
时混合了字节字符串和Unicode值:


哦将unicode与ASCII混合使用。。。我现在正把头撞在墙上(同时打字)。谢谢。这一定是那种日子。。。我将把它标为答案。
>>> "{}".format(script)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\u2026' in position 9: ordinal not in range(128)
>>> u"{}".format(script)
u'"Testing \u2026"'