Python 奇怪的语法错误:定义返回语句后语法无效
我读过很多奇怪的语法错误问题,还没有在其中看到我的问题,我真的不知所措。我正在做一些作业,作业的截止日期越来越近,这个错误我无法摆脱:Python 奇怪的语法错误:定义返回语句后语法无效,python,return,syntax-error,Python,Return,Syntax Error,我读过很多奇怪的语法错误问题,还没有在其中看到我的问题,我真的不知所措。我正在做一些作业,作业的截止日期越来越近,这个错误我无法摆脱: def create_voting_dict(): strlist = [voting_data[i].split() for i in range(len(voting_data))] return voting_dict = {strlist[h][0]:[int(strlist[h][g]) for g in range(3, len(st
def create_voting_dict():
strlist = [voting_data[i].split() for i in range(len(voting_data))]
return voting_dict = {strlist[h][0]:[int(strlist[h][g]) for g in range(3, len(strlist[h]))] for h in range(len(strlist))}
这让我知道了错误:
return voting_dict = {strlist[h][0]:[int(strlist[h][g]) for g in range(3, len(strlist[h]))] for h in range(len(strlist))}
^
SyntaxError: invalid syntax
当我在过程中定义投票表决时,这个错误没有发生,但是我需要全局定义它,所以我把它放在return之后,然后我得到了错误。我一直在数括号,但这似乎不是问题所在
我确信当我看到这个问题时,它是非常容易的,但我就是看不到它。谢谢你的帮助
*投票数据是一个包含字符串的列表,我执行了拆分字符串并创建字典的过程您无法在
返回中定义。(因为赋值不返回值)只需执行即可
或者在一个新语句中定义一个投票记录
,然后返回投票记录
参见示例-
>>> def test():
return num = 2
SyntaxError: invalid syntax
>>> def test():
return 2
这是您的返回语句的问题,在该语句中您无法执行任务。只需在之前执行一步。如果要创建/填充全局变量投票
,请执行以下操作:
def create_voting_dict():
strlist= [voting_data[i].split() for i in range(len(voting_data))]
global voting_dict
voting_dict= {strlist[h][0]:[int(strlist[h][g]) for g in range(3, len(strlist))}
create_voting_dict()
或
甚至
def create_voting_dict(vd):
strlist= [vd[i].split() for i in range(len(vd))]
return {strlist[h][0]:[int(strlist[h][g]) for g in range(3, len(strlist))}
voting_dict= create_voting_dict(voting_data)
后者的优点是更通用,因此可以在其他情况下使用。我可以并且将在10分钟内完成:)后续过程使用此过程创建的投票记录,但是当我运行它们时,我得到的错误全局投票记录没有定义。知道这是怎么造成的吗?这就是我试图将定义放在return语句中的原因。如果您的voting\u dict
是一个全局变量,您需要在函数中使用global voting\u dict
语句。否则,您只需返回字典并使用callee函数访问它。@sukritkalla:+1获取第二个版本的注释。没有看到代码很难确定,但很可能voting\u dict
根本不需要是全局变量,即使它是全局变量,也几乎可以肯定create\u voting\u dict
不需要看到或修改它(因为它返回了值)。你是对的,这些函数在没有全局性的情况下工作,但是当给我的作业评分的脚本在上面运行时,我得到的错误是它不是全局的。这可能与我如何定义我的函数以及分级脚本如何调用它们有关。将其设置为全局可解决此问题。谢谢你们的时间,伙计们。为什么你们要使用所有这些range(len(…)
调用来让事情变得过于复杂?为什么不干脆{outer[0]:[int(inner)for inner in outer[3:]for outer in strlist]}
?另外,一般来说,如果您在121个字符的行中遇到语法错误,并且有大量的paren、方括号和大括号,那么调试的第一步应该是将其分成更小的部分,并找出哪一部分有错误。事实上,即使这里没有错误,您真的能理解这行代码的原样吗?(当然你不能在一个80列的窗口中,像一个SO问题或一个典型的终端……但即使忽略这一点,也很难理解。)我花了一些时间阅读,但实际上你第一次评论中的表述会让它变得不那么复杂。至于你的第二个评论,我会把它记在心上,为我的下一个错误:)谢谢。我的编程经验有限。
def create_voting_dict():
strlist= [voting_data[i].split() for i in range(len(voting_data))]
return {strlist[h][0]:[int(strlist[h][g]) for g in range(3, len(strlist))}
voting_dict= create_voting_dict()
def create_voting_dict(vd):
strlist= [vd[i].split() for i in range(len(vd))]
return {strlist[h][0]:[int(strlist[h][g]) for g in range(3, len(strlist))}
voting_dict= create_voting_dict(voting_data)