gpt4 book ai didi

python - 以 unicode 字符串为名称的 namedtuple

转载 作者:太空狗 更新时间:2023-10-29 20:58:36 25 4
gpt4 key购买 nike

我在将 unicode 字符串指定为命名元组的名称时遇到问题。这有效:

a = collections.namedtuple("test", "value")

这不是:

b = collections.namedtuple("βαδιζόντων", "value")

我得到了错误

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib64/python3.4/collections/__init__.py", line 370, in namedtuple
result = namespace[typename]
KeyError: 'βαδιζόντων'

为什么会这样?文档说,“Python 3 还支持在标识符中使用 Unicode 字符”,关键是有效的 unicode?

最佳答案

问题特别在于字母 ó(U+1F79 带有 oxia 的希腊小写字母 omicron)。这是一个“兼容性字符”:Unicode 宁愿您使用 ó(U+03CC 希腊小写字母 omicron 和 tonos)。 U+1F79 仅存在于 Unicode 中,以便往返于区分 oxia 和 tonos 的旧字符集,后来证明这种区分是不正确的。

当您在标识符中使用兼容字符时,Python 的源代码解析器会自动将它们规范化以形成 NFKC,因此您的类名以 U+03CC 结尾。

不幸的是 collections.namedtuple 不知道这件事。它创建新类实例的方式是将给定的名称插入到字符串中的一堆 Python 代码中,然后执行它(糟糕,对吗?),并从生成的局部变量中提取类dict using its name...原始名称,而不是 Python 实际编译的规范化版本,因此失败。

这是 collections 中的一个错误,可能值得归档,但现在您应该使用规范字符 U+03CC ó

关于python - 以 unicode 字符串为名称的 namedtuple,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30503539/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com