标识符中存在无效字符

52 投票
12 回答
455967 浏览
提问于 2025-04-17 15:41

我有一段代码,其中包括:

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 个回答

6

和之前的回答类似,这个问题是因为有一些字符(可能是看不见的)让Python解释器无法识别。这个问题通常是因为复制粘贴代码造成的,所以重新输入那一行代码是一个解决办法。

不过,如果你不想重新输入那一行代码,可以把你的代码粘贴到这个工具或者类似的工具里(你可以在谷歌上搜索“在线显示unicode字符”),这样就能找出任何不标准的字符。例如,

s='    values ​​=  list(analysis.values ​​())'

会变成

s='    values U+200B U+200B​​ =  list(analysis.values U+200B U+200B ​​())'

然后你可以把这些不标准的字符从字符串中删除。

12

如果你的键盘设置为“英语(美国国际)”而不是“英语(美国)”,那么双引号就不能正常使用。这就是为什么在你的情况下,单引号可以正常工作的原因。

113

错误信息 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这样的软件当代码编辑器,那就是问题所在。应该使用文本编辑器。如果不是……那么,不管是什么根本原因导致你出现这些垃圾字符、缩进错误和多余空格,先解决那个问题,再来修复你的代码。

撰写回答