使用Unicode码点编写Python语句报错及可行实现方法咨询
问题根因
Python解析源代码分为两个核心阶段:
- 先按照文件头部声明的编码读取字节,解码为Unicode文本
- 再进行词法分词,只有字符串/字节串字面量内部的转义序列才会被解析,代码逻辑层的转义序列不会被识别,开头的
\会被直接判定为行续行符,要求其后必须紧跟换行,你第三行\后接u不符合语法规则,因此抛出错误。
实现方法
如果要直接在代码逻辑层使用\uXXXX码点形式编写可执行语句,可以把源文件的编码声明修改为raw_unicode_escape,示例代码如下:
# -*- coding: raw_unicode_escape -*- print("This is a Unicode List") eval("\u0070\u0072\u0069\u006E\u0074\u0028\u0022This is a Unicode List\u0022\u0029") \u0070\u0072\u0069\u006E\u0074\u0028\u0022This is a Unicode List\u0022\u0029
该编码会在第一步字节转Unicode文本的阶段就把全文件所有\uXXXX序列直接解码为对应的Unicode字符,词法分析阶段拿到的第三行就是正常的print("This is a Unicode List")语句,可以正常执行。
注意事项
- 使用
raw_unicode_escape编码时,全文件的反斜杠都会被当做转义前缀处理,如果需要编写普通反斜杠字符,需要写\\进行转义。 - 该方案仅适合特殊调试/研究场景,生产环境建议直接编写原生字符,可读性和可维护性更高。
内容的提问来源于stack exchange,提问作者Suresh Nanjan
相关产品推荐
相关产品推荐

