43

我正在处理 HP Code Wars 2012 中的信件分发问题。我不断收到一条错误消息,上面写着“标识符中的字符无效”。这是什么意思,如何解决?

是包含信息的页面。

import  string

def  text_analyzer(text):
'''The text to be parsed and
the number of occurrences of the letters given back
be. Punctuation marks, and I ignore the EOF
simple. The function is thus very limited.

'''
    result =  {}
 
# Processing
    for  a in  string.ascii_lowercase:
    result [a] =  text.lower (). count (a)
 
    return  result


def  analysis_result (results):

# I look at the data
    keys =  analysis.keys ()
    values \u200b\u200b=  list(analysis.values \u200b\u200b())
    values.sort (reverse = True )

# I turn to the dictionary and
# Must avoid that letters will be overwritten
    w2 =  {}
    list =  []
 
    for  key in  keys:
        item =  w2.get (results [key], 0 )
        if  item = =  0 :
            w2 [analysis results [key]] =  [key]
        else :
            item.append (key)
            w2 [analysis results [key]] =  item

# We get the keys
    keys =  list (w2.keys ())
    keys.sort (reverse = True )
 
    for  key in  keys:
        list =  w2 [key]
        liste.sort ()
        for  a in  list:
            print (a.upper (), "*"  *  key)        
     

text =  """I have a dream that one day this nation will rise up and live out the true
meaning of its creed: "We hold these truths to be self-evident, that all men
are created equal. "I have a dream that my four little children will one day
live in a nation where they will not be Judged by the color of their skin but
by the content of their character.
# # # """

analysis result =  text_analyzer (text)
analysis_results (results)
4

11 回答 11

101

该错误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 或 wiki 之类的站点或 PDF 文件中复制了一些格式化(非纯文本)代码。

如果您的编辑器没有为您提供查找和修复这些字符的方法,只需删除并重新键入该行。

当然,你也至少有两个IndentationError不缩进的东西,至少还有一个SyntaxError来自停留空格(比如= =代替==)或下划线变成空格(比如analysis results代替analysis_results)。

问题是,你是如何让你的代码进入这个状态的?如果您使用 Microsoft Word 之类的东西作为代码编辑器,那就是您的问题。使用文本编辑器。如果不是……好吧,不管是什么根本问题导致你最终得到这些乱码、缩进和额外空格,在你尝试修复代码之前先修复它。

于 2013-02-13T01:08:32.123 回答
12

如果您的键盘设置为美国英语(国际)而不是美国英语,则双引号不起作用。这就是单引号在您的情况下起作用的原因。

于 2018-02-09T07:33:49.230 回答
4

与前面的答案类似,问题是 Python 解释器无法识别的某些字符(可能是不可见的)。因为这通常是由于复制粘贴代码造成的,所以重新键入该行是一种选择。

但是如果您不想重新输入该行,您可以将您的代码粘贴到此工具或类似的工具中(谷歌“在线显示 unicode 字符”),它会显示任何非标准字符。例如,

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

变成

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

然后,您可以从字符串中删除非标准字符。

于 2021-02-10T15:59:53.633 回答
3

仔细看你的报价,这是对还是错!有时双引号不能正常工作,这取决于您的键盘布局。

于 2019-09-12T02:33:54.447 回答
2

我有一个类似的问题。我的解决方案是将减号从:

-
于 2020-09-18T18:54:59.803 回答
2

当我有时输入中文时,我得到了那个错误。当谈到标点符号时,您不会注意到您实际上是在输入中文版本,而不是英文版本。

解释器会给你一个错误信息,但对于人眼来说,很难注意到差异。

例如中文的“,”;英文的“,”。所以要注意你的语言设置。

于 2020-12-09T00:59:25.190 回答
1

此错误主要发生在复制粘贴代码时。尝试编辑/替换减号(-)、括号({)符号。

于 2020-10-08T09:56:57.063 回答
1

不确定这是否正确,但是当我从一篇关于使用 pgmpy 的论文中复制一些代码并将其粘贴到 Spyder 下的编辑器中时,我一直收到“标识符中的无效字符”错误,尽管它对我来说看起来并不坏。特定的行是grade_cpd = TabularCPD(variable='G',\

没有充分的理由,我在整个代码中都'用替换了它并且它起作用了。"不知道为什么,但它确实有效

于 2015-11-20T00:24:48.237 回答
1
于 2020-01-08T21:21:09.103 回答
0

如果您只是运行模块,则在 IDLE 中不会收到好的错误消息。尝试在 IDLE shell 中输入导入命令,您将收到一条信息量更大的错误消息。我有同样的错误,这一切都不同了。

(是的,我从电子书中复制了代码,里面充满了看不见的“错误”字符。)

于 2015-01-01T05:11:43.340 回答
0

我的解决方案是将我的 Mac 键盘从 Unicode 切换到美国英语。

于 2020-11-12T13:53:53.970 回答