标识符中的字符无效

时间:2013-02-13 00:54:10

标签: python python-3.x

我正在处理HP代码大战2012中的信件分发问题。我一直收到一条错误消息,指出标识符中的无效字符。这意味着什么以及如何解决这个问题。这是包含信息的页面。 hpcodewars.org/past/cw15/problems/2012ProblemsFinalForPrinting.pdf  这是代码

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)

11 个答案:

答案 0 :(得分:48)

错误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())'

所以,那是\u200bZERO WIDTH SPACE。这就解释了为什么你无法在页面上看到它。最常见的是,你得到这些是因为你已经从StackOverflow或wiki这样的网站上复制了一些格式化的(非纯文本)代码,或者从PDF文件中复制了这些代码。

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

当然,你还有至少两个IndentationError来自不缩进的内容,至少还有一个SyntaxError来自逗留空间(例如= =而不是== )或下划线变成空格(如analysis results而不是analysis_results)。

问题是,您是如何将代码置于此状态的?如果你使用像Microsoft Word这样的代码编辑器,那就是你的问题。使用文本编辑器。如果不是......好吧,无论根本问题是什么导致你最终得到这些垃圾字符,破碎的缩进和额外的空格,在你尝试修复代码之前修复它。

答案 1 :(得分:3)

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

答案 2 :(得分:2)

我遇到了类似的问题。我的解决方案是将以下字符改为:

import spark.implicits._
import org.apache.spark.sql.functions._
import org.apache.spark.sql.types._
//sample RDD
val rdd=spark.sparkContext.parallelize(Seq(Row(1,1,2),Row(2,null,3),Row(3,null,null)))
//schema
val schema=(new StructType).add("ID",IntegerType).add("A",IntegerType).add("B",IntegerType)
//creating dataframe
var df=spark.createDataFrame(rdd,schema)
df.show
+---+----+----+
| ID|   A|   B|
+---+----+----+
|  1|   1|   2|
|  2|null|   3|
|  3|null|null|
+---+----+----+

//get all the columns except ID column
val columnsExceptID=df.columns.filter(_!="ID")
//fill the corresponding column name in the place of null
df=columnsExceptID.foldLeft(df){(df,column)=>df.withColumn(column,when(col(column).isNull,column).otherwise(""))}

//array + explode ---> to get required output pattern of DF      
df=df.withColumn("colName",array(columnsExceptID.map(col(_)):_*)).drop(columnsExceptID:_*)

df=df.select('ID,explode('colName)).where(length('col)>0)
df.show
+---+---+
| ID|col|
+---+---+
|  2|  A|
|  3|  A|
|  3|  B|
+---+---+

答案 3 :(得分:2)

有时我输入中文时出现错误。 对于标点符号,您不会注意到实际上是在键入中文版本,而不是英文版本。

解释器会给您一个错误消息,但是对于人眼来说,很难注意到它们之间的差异。

例如,中文的“,”;和“,”为英文。 因此,请注意您的语言设置。

答案 4 :(得分:2)

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

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

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

变成

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

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

答案 5 :(得分:1)

仔细查看您的报价,这是正确还是错误!有时双引号无法正常工作,这取决于您的键盘布局。

答案 6 :(得分:1)

有点晚了,但是我遇到了同样的错误,我意识到那是因为我从PDF复制了一些代码。检查这两者之间的区别: - 第一个是通过敲击键盘上的减号,第二个是通过乳胶生成的PDF。

答案 7 :(得分:0)

如果您只是运行模块,则在IDLE中没有收到错误的错误消息。尝试从IDLE shell中键入import命令,您将获得更多信息性错误消息。我有同样的错误,这就完全不同了。

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

答案 8 :(得分:0)

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

答案 9 :(得分:0)

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

答案 10 :(得分:-1)

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

我没有充分的理由在整个代码中将'替换为"并且它有效。不确定为什么,但确实有效