【问题标题】:Why do I get the syntax error "SyntaxError: invalid syntax" in a line with perfectly valid syntax?为什么在具有完全有效语法的行中出现语法错误 \"SyntaxError: invalid syntax\"?
【发布时间】:2022-11-06 04:44:50
【问题描述】:

我有这段代码:

def Psat(self, T):
    pop= self.getPborder(T)
    boolean=int(pop[0])
   
    P1=pop[1]
    P2=pop[2]
    if boolean:
        Pmin = float(min([P1, P2]))
        Pmax = float(max([P1, P2]))
        Tr=T/self.typeMolecule.Tc
        w=0.5*(1+scipy.tanh((10**5)*(Tr-0.6)))
        fi1=0.5*(1-scipy.tanh(8*((Tr**0.4)-1)))
        fi2=0.460*scipy.sqrt(1-(Tr-0.566)**2/(0.434**2)+0.494

        guess = Pmin+(Pmax-Pmin)*((1-w**2)*fi1+(w**2)*fi2)   # error here
    
        solution = scipy.optimize.newton(funcPsat,guess, args=(T,self))

在标记的代码行 guess = Pmin+(Pmax-Pmin)*((1-w**2)*fi1+(w**2)*fi2) 上,我收到一条错误消息:SyntaxError: invalid syntax

PminPmaxwfi1fi2此时都已经赋值完毕,为什么会报错呢?

当我从代码中删除该行时,同样的错误出现在下一行代码中,同样没有明显的原因。

【问题讨论】:

  • 错误的根源可能发生在您发布的行上方。你能再贴一点代码吗?
  • 和完整的追溯
  • 您可能之前在某处忘记了括号。没有更大的上下文就不可能准确地说出来。请提供完整的回溯和重现问题的代码。
  • 我发现了错误,前几行中缺少一个括号。谢谢您的帮助

标签: python syntax-error spyder


【解决方案1】:

当在看似正确的行上报告错误时,请尝试删除(或注释掉)看似错误的行。如果错误移动到下一行,则有两种可能:

  • 要么两个都线路有问题(第二个可能被第一个隐藏了);或者
  • 以前的线有问题正在结转。

后者是更可能,特别是如果删除另一行导致错误再次移动。

例如,如下代码,保存为twisty_passages.py

xyzzy = (1 +
plugh = 7

将在第 2 行产生错误,即使问题显然是由第 1 行引起的:

  File "twisty_passages.py", line 2
    plugh = 7
          ^
SyntaxError: invalid syntax

问题中的代码也有类似的问题:上一行的代码有不平衡的括号。注释以使其更清楚:

# open parentheses: 1  2             3
#                   v  v             v
fi2=0.460*scipy.sqrt(1-(Tr-0.566)**2/(0.434**2)+0.494
#                               ^             ^
# close parentheses:            1             2

真的没有一般的对此的解决方案-需要分析代码并明白, 为了确定如何括号应该改变。

【讨论】:

    【解决方案2】:

    您在这一行中缺少一个封闭的括号:

    fi2=0.460*scipy.sqrt(1-(Tr-0.566)**2/(0.434**2)+0.494
    

    有三个(,只有两个)

    【讨论】:

    • 根据 paxdiablo 的说法,我的案例被归类为“前一行有问题正在继续处理”。我找到错误的方法是逐行向上注释代码,直到语法错误暂时消失。我给出注释标记的最后一行是导致错误的那一行。
    【解决方案3】:

    我遇到了类似的问题,有一个我知道不应该是语法错误的语法错误。在我的例子中,结果是 Python 2 解释器试图运行 Python 3 代码,反之亦然;我认为我的 shell 有一个混合了 Python 2 和 Python 3 的 PYTHONPATH。

    【讨论】:

      【解决方案4】:

      我注意到在以下位置使用空格可能会导致没有明显原因的无效语法错误:

      print(f'{something something}')
      

      Python IDLE 似乎由于某种原因跳转并突出了第一行的一部分(即使第一行恰好是注释),这是一种误导。

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-06
      • 2015-06-10
      • 2022-07-02
      • 1970-01-01
      • 1970-01-01
      • 2021-07-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多