python 2.7:为什么IPython Notebook会为非ascii字符抛出错误?

时间:2014-04-01 11:06:10

标签: python ipython

我在OS X上使用IPython笔记本。我的源代码完全由ascii字符组成。但编译器向我报告我使用的是非ascii字符。源代码如下:

%%file Sierpinski_triangle.py

from turtle import *

reset()
tracer(False)

s = 'A+B+A−B−A−B−A+B+A'

l_angle = 60
r_angle = 60
for c in s:
    if c == 'A' or c == 'B':
        forward(10)
    elif c == '+':
        left(l_angle)
        #l_angle = l_angle * -1
    elif c == '-':
        right(r_angle)
        #r_angle = r_angle * -1
done()

File "Sierpinski_triangle.py", line 7
SyntaxError: Non-ASCII character '\xe2' in file Sierpinski_triangle.py on line 7, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details

提前谢谢!

2 个答案:

答案 0 :(得分:2)

你的错误是错误的。

尝试:

s = 'A+B+A-B-A-B-A+B+A'

[更新] 不知何故,SO使用的字体使得缺陷看起来相同。他们不是。尝试在文本编辑器中复制我的版本和版本,看看差异。

当我运行你的代码时,我会得到与你相同的错误。当我用asci minuses替换代码中的minuses时,代码运行正常。

您使用什么文本编辑器来创建此python代码?它有某种自动完成功能吗? (ms word?)如果是这样,请使用真正的文本编辑器或空闲来避免这些问题。

要证明它们不同,请尝试将字符串打印为十六进制(在新的.py文件中复制粘贴):

# -*- coding: utf-8 -*-

your_s = 'A+B+A−B−A−B−A+B+A'
my_s = 'A+B+A-B-A-B-A+B+A'
print(":".join("{:02x}".format(ord(c)) for c in your_s))
print(":".join("{:02x}".format(ord(c)) for c in my_s))

给你:

>>41:2b:42:2b:41:e2:88:92:42:e2:88:92:41:e2:88:92:42:e2:88:92:41:2b:42:2b:41
>>41:2b:42:2b:41:2d:42:2d:41:2d:42:2d:41:2b:42:2b:41

答案 1 :(得分:0)

这是由于在复制期间用非标准字符(如引号(`))替换撇号(')等标准字符引起的。当您从pdf文件复制文本时,它经常发生。差异非常微妙,但就Python而言,存在巨大差异。撇号对于指示文本字符串是完全合法的,但引号不是。