"Синтаксическая ошибка: неверный синтаксис" без видимых причин

Я пытался получить исправление и не могу найти причину ошибки. Pmin, Pmax, w, fi1 и fi2 были назначены конечные значения

guess=Pmin+(Pmax-Pmin)*((1-w**2)*fi1+(w**2)*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 twisty_passages.py:

xyzzy = (1 +
plugh = 7

генерирует ошибку:

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

несмотря на то, что проблема явно находится на линии 1.


В вашем конкретном случае это проблема. Скобки в строке перед вашей линией ошибок не имеют себе равных, как показано в следующем фрагменте:

# 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

В зависимости от того, чего вы пытаетесь достичь, решение может быть таким же простым, как просто добавить еще одну закрывающую скобку в конце, чтобы закрыть функцию sqrt.

Я не могу сказать наверняка, так как я не признаю выражение с головы. Вряд ли удивительно, если (предполагая, что PSAT - это фермент и использование идентификатора типа typeMolecule), это связано с молекулярной биологией - я, кажется, помню, что биология неизменно в молодости :-)

Ответ 2

В этой строке отсутствует короткий фрагмент:

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

Есть три (и только два).
Я надеюсь, что это поможет вам.

Ответ 3

После проверки всех скобок, сопоставления величин для '(' и ')' и всего, что я обнаружил в моем случае, было то, что скобка поля кода VS '[' auto-complete-generation добавляла что-то дополнительное, хотя и прозрачное. К счастью, VS Code указывает прямо на проблемную область (хотя и "невидимая"). Я исправил это, удалив и повторно набрав квадратные скобки штрих за штрихом.

Ответ 4

Я столкнулся с подобной проблемой, с синтаксической ошибкой, которая, как я знал, не должна быть синтаксической ошибкой. В моем случае оказалось, что интерпретатор Python 2 пытается запустить код Python 3, или наоборот; Я думаю, что у моей оболочки была PYTHONPATH со смесью Python 2 и Python 3.

Ответ 5

Если вы запускаете программу с python, попробуйте запустить ее с python3.