Python 3.5 中的注释给出 unicode 错误

Posted

技术标签:

【中文标题】Python 3.5 中的注释给出 unicode 错误【英文标题】:Comments in Python 3.5 giving unicode error 【发布时间】:2017-01-28 07:19:03 【问题描述】:

我正在使用 Spyder IDE,Python 3.5,它是 anaconda 发行版的一部分。以下是代码的前几行:

# -*- coding: utf-8 -*-
"""
Created on Tue Sep 20 16:22:40 2016

@author: pavan
This program reads csv file from the given directory .
The input directory for this is : "C:\Users\pavan\Documents\Python Scripts\EOD from Yahoo"
The output file is "comprehensive_trend.xlsx"

"""
import pdb
import pandas as pd
from datetime import date, datetime, timedelta
import os, glob
# Delarations
full_path = os.path.realpath(__file__)
current_directory = os.path.dirname(full_path)
directory = current_directory + "\\EOD from Yahoo\\"
#directory = "C:\\Users\\pavan\Documents\\Python Scripts\\EOD from Yahoo\\"

我在 Python 2.7 上运行此代码,它运行良好。就在最近我迁移到 Python 3.5 时,当我执行此代码时,我得到以下输出:

SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 145-146: truncated \UXXXXXXXX escape

经过一番折腾,我从 cmets 部分删除了这一行:

The input directory for this is : "C:\Users\pavan\Documents\Python Scripts\EOD from Yahoo"

现在程序可以正常运行了。

我的疑惑:

    为什么会这样? 在 Python 3.5 中编写 cmets 以避免这些问题的最佳方法是什么 什么样的错误?

【问题讨论】:

\U(如 C:\Users)在 Python 3 中的字符串中具有特殊含义。尝试在注释前直接添加一个“r”,告诉它你不想要这个行为,即r""" ... Created on .... 类似于***.com/q/1347791/407651 请注意,“cmets 部分”是一个文档字符串。这不是评论。见***.com/q/33734170/407651。 【参考方案1】:

我最近第一次使用“多行”评论时遇到了类似的问题,所以我做了一些研究。

'multi-line' comment in python doesn't actually exist. 如同,它们被视为字符串(因此它可以用作文档字符串)。事实上,它们被视为没有变量的字符串。这意味着解释器不能忽略代码中的“多行”cmets,因此任何特殊字符都需要转义 \

现在知道它们被视为字符串,有两种方法可以保留您的 cmets。

    将 cmets 转换为单行 cmets。在许多 IDE 中,多行转换注释是可能的。 (VScode 中的Ctrl+K+C)。 This is recommended by PEP8

    在你的多行注释块前面拍r,表示后面的字符串中的所有字符都将被视为原始字符​​p>

来自您的代码

r"""
Created on Tue Sep 20 16:22:40 2016

@author: pavan
This program reads csv file from the given directory .
The input directory for this is : "C:\Users\pavan\Documents\Python Scripts\EOD from Yahoo"
The output file is "comprehensive_trend.xlsx"

"""

【讨论】:

【参考方案2】:

您在 cmets 中使用 \User,而 \U 被解释为无法解码的 unicode 文字。

请改用\\User

同样,\u 应替换为 \\u

附: Python 支持多行字符串文字作为 docstring,这里的用法非常好,推荐。

【讨论】:

以上是关于Python 3.5 中的注释给出 unicode 错误的主要内容,如果未能解决你的问题,请参考以下文章

python 3.5代码中的变量需要类型注释

Python 3.5+中的递归类型[重复]

Python >=3.5:在运行时检查类型注释

python编码与代码注释

关闭“Python 3.5 版不支持变量注释”错误消息

使用 python 3.5 样式类型注释进行鸭子打字