我正在处理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)
答案 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())'
所以,那是\u200b
或ZERO 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',\
我没有充分的理由在整个代码中将'
替换为"
并且它有效。不确定为什么,但确实有效