Python 3.5中的注释给出了unicode错误

时间:2016-09-20 11:26:45

标签: python-2.7 unicode python-3.5

我使用的是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

在破坏了我的头脑之后,我从评论部分删除了这一行:

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

现在程序运行正常。

我的怀疑:

  1. 为什么会这样?
  2. 在Python 3.5中编写注释以避免这些注释的最佳方法是什么 那种错误?

2 个答案:

答案 0 :(得分:1)

我最近第一次使用“多行”注释遇到了类似的问题,因此我进行了一些研究。

'multi-line' comment in python doesn't actually exist.与之类似,它们被视为字符串(因此为什么可以将其用作文档字符串)。实际上,它们被视为没有变量的字符串。这意味着解释器无法忽略代码中的“多行”注释,因此任何特殊字符都需要转义\

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

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

  2. 在多行注释块前面的
  3. r,表示后面的字符串中的所有字符都将作为原始字符

根据您的代码

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"

"""

答案 1 :(得分:0)

您在注释中使用\User,并且\U被解释为无法解码的Unicode文字。

改为使用\\User

类似地,\u应替换为\\u

P.S。 Python支持多行字符串文字作为docstring,在此用法非常好,建议使用。