¿Por qué aparece "SyntaxError: sintaxis no válida" en una línea con sintaxis perfectamente válida?
Esta es la línea de código:
guess = Pmin+(Pmax-Pmin)*((1-w**2)*fi1+(w**2)*fi2)
Pmin
A , Pmax
, w
y fi1
a fi2
todos se les han asignado valores finitos en este punto, entonces, ¿por qué hay un error?
Cuando elimino esa línea del código, aparece el mismo error en la siguiente línea de código, nuevamente sin motivo aparente.
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))
Para versiones anteriores de Python (1) , se puede informar un error en una línea que parece ser correcta. En ese caso, debería intentar comentar la línea donde parece estar el error. Si el error pasa a la siguiente línea, existen dos posibilidades:
- O ambas líneas tienen un problema (y la segunda quedó oculta por la primera); o
- La línea anterior tiene un problema que se está llevando adelante.
Esto último es más probable , especialmente si comentar la nueva línea infractora hace que el error vuelva a moverse.
Por ejemplo, considere un código como el siguiente, guardado como prog.py
:
xyzzy = (1 +
plugh = 7
Python 3.8.10 informará un error en la línea 2, aunque el problema está claramente causado por la línea 1:
pax> python3.8 prog.py
File "prog.py", line 2
plugh = 7
^
SyntaxError: invalid syntax
El código de su pregunta tiene un problema similar: el código de la línea anterior al error informado tiene paréntesis desequilibrados.
Anotado para que quede más claro:
# 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
Realmente no existe una solución general para esto: es necesario analizar y comprender el código para determinar cómo se deben modificar los paréntesis.
(1) Por si sirve de algo, el nuevo analizador PEG introducido en Python 3.9 allanó el camino para mensajes de error mucho mejores (mejorando gradualmente desde 3.10 hasta 3.12). Esto incluye identificar correctamente en el código fuente dónde está el error:
pax> python3 prog.py
File "prog.py", line 1
xyzzy = (1 +
^
SyntaxError: '(' was never closed
Te falta un par cercano en esta línea:
fi2=0.460*scipy.sqrt(1-(Tr-0.566)**2/(0.434**2)+0.494
Son tres (
y sólo dos )
.