为什么在语法完全正确的一行中会出现“SyntaxError:语法无效”?
- 2024-12-09 08:30:00
- admin 原创
- 166
问题描述:
这是代码行:
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))
解决方案 1:
对于早期版本的 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
解决方案 2:
您在此行中缺少一个右括号:
fi2=0.460*scipy.sqrt(1-(Tr-0.566)**2/(0.434**2)+0.494
有三个(
,而且只有两个)
。
解决方案 3:
我遇到了类似的问题,其中有一个语法错误,但我知道它不应该是语法错误。就我而言,结果是 Python 2 解释器试图运行 Python 3 代码,反之亦然;我认为我的 shell 有一个混合了 Python 2 和 Python 3 的 PYTHONPATH。
解决方案 4:
我注意到,无效语法错误可能是由于在以下内容中使用空格而导致的,且原因不明:
print(f'{something something}')
Python IDLE 似乎会因为某种原因跳转并突出显示第一行的某个部分(即使第一行恰好是一条注释),这具有误导性。
相关推荐
热门文章
项目管理软件有哪些?
热门标签
云禅道AD