这是代码行:
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(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
fi2=0.460*scipy.sqrt(1-(Tr-0.566)**2/(0.434**2)+0.494
有三个
(
,只有两个
)
。
print(f'{something something}')
Python IDLE 似乎由于某种原因跳转并突出显示第一行的一部分(即使第一行恰好是注释),这是误导性的。