标识符中存在无效字符
我有一段代码,其中包括:
def analysis_result (results):
keys = analysis.keys ()
values = list(analysis.values ())
values.sort (reverse = True )
# More code...
但是在 values = list(analysis.values())
这一行,我遇到了一个错误,提示 SyntaxError: invalid character in identifier
。这是为什么呢?代码哪里出问题了,我该怎么修复?
请注意,重新输入这段代码不会出现 SyntaxError
,但如果复制粘贴就会出现这个错误。
这个错误是因为代码示例中有一些看不见的非打印字符。不要因为无法重现这个问题而关闭提问,编辑时要特别小心。在提问的某个历史版本中,曾尝试用反斜杠转义字符来“显示”这个无效字符,但这样做是无效的;我们只能通过把代码当作字符串来处理,并请求Python给出字符串表示来查看。虽然输入使用反斜杠转义字符的代码也是不正确的,但错误信息会有所不同。
12 个回答
和之前的回答类似,这个问题是因为有一些字符(可能是看不见的)让Python解释器无法识别。这个问题通常是因为复制粘贴代码造成的,所以重新输入那一行代码是一个解决办法。
不过,如果你不想重新输入那一行代码,可以把你的代码粘贴到这个工具或者类似的工具里(你可以在谷歌上搜索“在线显示unicode字符”),这样就能找出任何不标准的字符。例如,
s=' values = list(analysis.values ())'
会变成
s=' values U+200B U+200B = list(analysis.values U+200B U+200B ())'
然后你可以把这些不标准的字符从字符串中删除。
如果你的键盘设置为“英语(美国国际)”而不是“英语(美国)”,那么双引号就不能正常使用。这就是为什么在你的情况下,单引号可以正常工作的原因。
错误信息 SyntaxError: invalid character in identifier
的意思是,在你的变量名、函数名等中间有一些不是字母、数字或下划线的字符。实际的错误信息大概会是这样的:
File "invalchar.py", line 23
values = list(analysis.values ())
^
SyntaxError: invalid character in identifier
这个信息告诉你具体的问题所在,所以你不需要猜测“我哪里有无效字符”?如果你看看那一行代码,你会发现里面有一些看不见的垃圾字符。把它们删掉,你就能解决这个问题。
如果你想知道那些垃圾字符是什么,我把你代码中出问题的那一行复制到Python解释器里:
>>> s=' values = list(analysis.values ())'
>>> s
' values \u200b\u200b= list(analysis.values \u200b\u200b())'
所以,这个字符是 \u200b
,也叫做零宽空格。这就是为什么你在页面上看不见它的原因。通常,这种情况发生是因为你从像StackOverflow或维基百科这样的网站,或者从PDF文件中复制了一些格式化的(而不是纯文本的)代码。
如果你的编辑器没有办法找到并修复这些字符,那就直接删掉这一行,然后重新输入。
当然,你的代码里至少还有两个 IndentationError
是因为没有正确缩进,至少还有一个 SyntaxError
是因为多余的空格(比如 = =
而不是 ==
)或者下划线变成了空格(比如 analysis results
而不是 analysis_results
)。
问题是,你的代码怎么会变成这样?如果你用像Microsoft Word这样的软件当代码编辑器,那就是问题所在。应该使用文本编辑器。如果不是……那么,不管是什么根本原因导致你出现这些垃圾字符、缩进错误和多余空格,先解决那个问题,再来修复你的代码。