我在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
提前谢谢!
答案 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而言,存在巨大差异。撇号对于指示文本字符串是完全合法的,但引号不是。