Python SyntaxError:非ASCII字符' \ xe2'在文件中

时间:2014-06-09 10:48:38

标签: python django

我刚刚使用在Python 3下运行Django App到使用Python 2.7。我现在得到这个错误:

SyntaxError: Non-ASCII character '\xe2' in file /Users/user/Documents/workspace/testpro/testpro/apps/common/models/vendor.py on line 9, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details

它所引用的代码只是一个评论:

class Vendor(BaseModel):
    """
    A company manages owns one of more stores.‎
    """
    name = models.CharField(max_length=255)


    def __unicode__(self):
        return self.name

为什么?

这有效:

 class Vendor(BaseModel):
        """

        """
        name = models.CharField(max_length=255)


        def __unicode__(self):
            return self.name

2 个答案:

答案 0 :(得分:9)

您的docstring中有一个UTF-8编码的U+200E LEFT-TO-RIGHT MARK

'\n    A company manages owns one of more stores.\xe2\x80\x8e\n    '

从代码中删除该代码点(并尝试使用代码编辑器,而不是文字处理器),或者只将PEP-263编码注释放在文件的顶部:

# encoding=utf8

Python 3默认使用UTF-8,Python 2默认为ASCII源代码,除非您添加该注释。

答案 1 :(得分:0)

pointed outMartijn Pieters,您的文档字符串包含UTF-8(即非ASCII)字符。

我想详细说明一下声明文件编码的正确方法。正如PEP 263中所述:

  

要定义源代码编码,必须将魔术注释放入   源文件作为文件的第一行或第二行,例如:

# coding=<encoding name>
     

或(使用流行的编辑器认可的格式):

#!/usr/bin/python
# -*- coding: <encoding name> -*-
     

或:

#!/usr/bin/python
# vim: set fileencoding=<encoding name> : 
     

更准确地说,第一行或第二行必须与以下正则表达式匹配:

^[ \t\f]*#.*?coding[:=][ \t]*([-_.a-zA-Z0-9]+)

这意味着什么(如answer to another question中的概括):

  

因此,您可以在“编码”部分之前放置几乎所有内容,但是如果您希望100%兼容python-docs-recommendation-comm,则请坚持使用“编码”(无前缀)。

因此,对于这种情况,建议的“魔术评论”为:

# coding=utf8

或:

#!/usr/bin/python
# -*- coding: utf8 -*-

或:

#!/usr/bin/python
# vim: set fileencoding=utf8 :