Unicode解码字节错误(Python)

时间:2013-05-26 15:57:24

标签: python unicode

此错误消息的含义是什么?

  

SyntaxError :( unicode error)'unicodeescape'编解码器无法解码位置123-125中的字节:截断\ uXXXX转义

我在注释中的某个位置报告了此错误,该位置仅包含非Unicode字符。

有问题的代码如下:

""" loads Font combinations from a file
#
# The font combinations are saved in the format:
% -> Palatino, Helvetica, Courier
\usepackage{mathpazo}                 %% --- Palatino (incl math)
\usepackage[scaled=.95]{helvet}       %% --- Helvetica (Arial)
\usepackage{courier}                  %% --- Courier
\renewcommand{\fontdesc}{Palatino, Arial, Courier}
% <-------------------
#
# with "% ->" indicating the start of a new group
# and "% <" indicating the end.
"""

4 个答案:

答案 0 :(得分:2)

正如其他人所说,它试图将\usepackage解析为Unicode转义并失败,因为它无效。解决这个问题的方法是逃避反斜杠:

"""\\usepackage""

或者改为使用raw string

r"""\usepackage"""

PEP 257,涵盖文档字符串约定,建议后者。

答案 1 :(得分:1)

这意味着您正在解码的数据中的\ uXXXX转义序列无效。具体来说,这意味着要做空。很可能你在文本的某处有“\ U”文本,但后面没有Unicode字符编号。

答案 2 :(得分:1)

Python 3字符串是Unicode,因此它会尝试解码'\ u'转义符。因此,即使您尝试使用字符串作为注释,它仍会尝试对其进行解码。

实际评论,例如:

#\usepackage{mathpazo}

不会被解码。

如果你注意到它在SyntaxError的类中,这意味着即使它是'无法访问的代码',它也会引发一个标志。

答案 3 :(得分:1)

值得注意的是,“有问题的代码”在技术上不是注释,而是在字节码编译期间将进行评估的多行字符串。

根据其在源文件中的位置,它可能最终位于docstring,因此它必须在语法上有效。

例如......

>>> def myfunc():
...     """This is a docstring."""
...     pass
>>> myfunc.__doc__
'This is a docstring.'
>>> help(myfunc)
Help on function myfunc in module __main__:

myfunc()
    This is a docstring.

Python中没有真正的多行注释分隔符,因此如果您不希望对其进行评估,请使用多个单行注释......

# This is my comment line 1
# ...line 2
# etc.
def myfunc():
    pass