python 2.7:IPython Notebook为何对非ascii字符报错?
我在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
这个问题是因为在复制的时候,把标准字符,比如撇号(‘),替换成了非标准字符,比如反引号(`)。这种情况在从PDF文件复制文本时经常发生。虽然这两者的区别看起来很细微,但在Python中却有很大的不同。撇号是合法的,可以用来表示文本字符串,而反引号则不行。
2
你的减号用错了。
试试这个:
s = 'A+B+A-B-A-B-A+B+A'
[更新]
不知道为什么,StackOverflow用的字体让减号看起来一样。其实它们是不一样的。你可以把我版本的减号和你版本的减号复制到一个文本编辑器里,看看有什么不同。
我运行你的代码时,遇到的错误和你一样。当我把你代码里的减号换成标准的减号时,代码就能正常运行了。
你用什么文本编辑器来写这个Python代码?它有没有什么自动补全的功能?(比如说Word?)如果有的话,建议你用一个真正的文本编辑器或者IDLE,这样可以避免这些问题。
为了证明它们是不同的,试着把字符串打印成十六进制(复制粘贴到新的.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