python - 奇怪的 UTF-8 单行解释器错误

标签 python python-3.x utf-8 character-encoding

所以,我有一个令人厌恶的程序:

print((lambda raw, name_file: ((lambda start_time, total, lines, names: ((lambda parsed: ('\n'.join(str(10*(parsed[0][name]+parsed[1][name]/2)/total).ljust(6) + name for name in names)))(list(map(lambda x: __import__("collections").Counter(x), map(lambda x: list(map(lambda x: x[1], x)), [list(group[1]) for group in __import__("itertools").groupby(sorted([list(group[1])[0] for group in __import__("itertools").groupby(sorted(list(map(lambda x: [x[3], ' '.join([x[4], x[5], x[6]]), __import__("datetime").datetime.strptime(x[0] + ' ' + x[1], '%Y.%m.%d %H:%M:%S')], map(str.split, filter(lambda x: (any(name.strip() in x for name in names) and "OK ( 0 )" in x), lines))))), lambda x: (x[0], x[1]))], key = lambda x: (x[2], x[1], x[0])), lambda x: ((x[2] < start_time+__import__("datetime").timedelta(days=7)) + (x[2] < start_time+__import__("datetime").timedelta(days=14))))]))))))(__import__("datetime").datetime.strptime(raw.readline().strip(), '%d.%m.%Y %H:%M'), int(raw.readline()), map(lambda x: x.replace("Минчен", ""), raw.readlines()), list(map(str.strip, name_file.readlines())))))(raw = open("test.txt", "r"), name_file = open("names.txt", "r")))

(可能在 pastebin 上更好)

几乎可以工作,但是它工作的方式非常奇怪,对我来说看起来像是一个解释器错误。

现在,代码中唯一的非 ASCII 字符位于最后的字符串“Минчен”中,即使如此,它们也完全兼容 UTF-8,这应该是默认编码。现在的问题是,Python 抛出这个错误:

Non-UTF-8 code starting with '\xd1' in file lulz.py on line 1, but no encoding declared;

这不仅仅是一些奇怪的编码问题!如果我删除字符串中的最后一个“н”,程序运行得很好;当我在其位置添加任何俄语字母时,解释器就会崩溃。即使我只在这个地方之前添加一个换行符,只要让这个字符串位于源代码的第二行,解释器就不会崩溃。

当然,考虑到这是多么挑剔和不稳定,我无法提供一个最小示例,但我很确定这不是预期的行为。这是解释器中的错误还是我做错了什么?

顺便说一句,它可能需要“names.txt”和“test.txt”存在;如果您想测试,可以使用这些名称创建两个空文件。

UPD 即使在任何单个 ( 之后添加一个空格也能让一切正常工作!这里肯定出了问题。

UPD2我正在使用Python 3.5.1

>>> python3 --版本 Python 3.5.1

UPD3这是我的file.

UPD4 这是一个十六进制转储:http://pastebin.com/5R1rbtc3

UPD5显然,这个问题只能在Mac上重现。我觉得不同平台上的不同行为并不是有意为之。

最佳答案

该错误在于您对默认源文件编码的期望。 当你使用Python 3.x时它只是UTF-8(我检查过,3.5解析可憎的东西没有问题)

Python 2.x 默认为 ASCII,因此在这个令人厌恶的内容中添加编码注释作为第一行,然后就可以开始了

# -*- coding: utf8 -*-

关于python - 奇怪的 UTF-8 单行解释器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40005226/

相关文章:

python - Pandas ,将日期时间格式 mm/dd/yyyy 转换为 dd/mm/yyyy

python - 更改 QTreeWidget 中复选框的样式而不影响 Maya 中的复选标记?

python - 如何使用库函数 scipy.stats.binom.pmf 返回给定概率的二项分布中的试验次数 (n)?

python-3.x - 使用 yaml 覆盖命名空间

python - 我转换为 UTC 的日期?

python - Django 1.8 csrf名称错误: Undefined

node.js - 如何通过nodejs以正确的编码保存pdf

python - lxml.html5parser : not working for arabic/persian html5s

具有 2 个输入的 python 3 map/lambda 方法

python - Unicode编码错误: 'decimal' codec can't encode character u'\x00' in position 8: invalid decimal Unicode string