为什么我在语法完全有效的行中收到“SyntaxError:无效语法”?

问题描述 投票:0回答:4

这是代码行:

guess = Pmin+(Pmax-Pmin)*((1-w**2)*fi1+(w**2)*fi2)
此时

Pmin
Pmax
w
fi1
fi2
都已经被赋值为有限值了,那为什么会出现错误呢?

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

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))
python syntax-error
4个回答
108
投票

对于早期版本的 Python(1),可能会在看起来正确的行上报告错误。在这种情况下,您应该尝试注释掉出现错误的行。如果错误移至行,有两种可能:

  • 要么两条行都有问题(第二行被第一行隐藏了);或
  • 行有问题,正在结转。

后者更有可能,特别是如果注释掉新的有问题的行会导致错误再次移动。

例如,考虑如下代码,另存为

prog.py
:

xyzzy = (1 +
plugh = 7

Python 3.8.10 将在第 2 行报告错误,即使问题显然是由第 1 行引起的:

pax> python3.8 prog.py
  File "prog.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

对此没有真正的通用解决方案 - 需要分析和理解代码,以便确定如何应更改括号。


(1) 值得一提的是,Python 3.9 中引入的新 PEG 解析器为大幅改进错误消息铺平了道路(从 3.10 到 3.12 逐渐改进)。这包括在源代码中正确识别错误所在: pax> python3 prog.py File "prog.py", line 1 xyzzy = (1 + ^ SyntaxError: '(' was never closed



9
投票

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

有三个
(

,只有两个

)
    


3
投票


-3
投票

print(f'{something something}')

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

© www.soinside.com 2019 - 2024. All rights reserved.