Forum rules
This is the right place for Ren’Py help. Please ask one question per thread, use a descriptive subject like ‘NotFound error in option.rpy’ , and include all the relevant information — especially any relevant code and traceback messages. Use the code tag to format scripts.
-
RayDizzle
- Regular
- Posts: 25
- Joined: Tue Jul 28, 2015 9:49 pm
- Deviantart: Gem2012
- Location: New Zealand
- Contact:
Invalid Syntax Error [SOLVED]
#1
Post
by RayDizzle » Tue Sep 15, 2015 10:44 pm
I’ve been scripting a vn and have gotten pretty far without too many issues. But I’ve come to a bit of a snag. At one point in my script, I’m getting an invalid syntax error. Here’s the code:
Code: Select all
label start:
default chose = ""
default roommate = ""
default chase = ""
default dinner_dylan = ""
$ alex = False
$ dinner_dylan = False
[Bunch of text]
$ chose = "dinner_dylan"
[Text]
$ roommate = "dylan"
[Text]
$ chase = "yes"
[Text]
$ chose = "brekkiealex"
label home:
hide shop
"I walked back to my dormroom to relax."
if alex == True:
jump alexhall
elif dinner_dylan == True:
"When I got back to my dormroom, Dylan was leaning against the wall of the corridor."
jump dylanhall
elif chose == "dinner_dylan":
"When I got back to my dormroom, Dylan was leaning against the wall of the corridor."
jump dylanhall
elif roommate == "dylan":
"When I got to my new room, Dylan was leaning against the wall of the corridor."
jump dylanroomhall
elif chase = "yes":
jump chaseyes
elif chose == "brekkiealex":
jump alexhall
else:
"On my way back, I saw this kid hanging around in the hallway."
jump nobody
It also seems to think that some of my variables are undefine character names and I have no idea why that is. So if anyone could give me a little help, that’d be great.
Last edited by RayDizzle on Wed Sep 16, 2015 3:17 am, edited 1 time in total.
-
trooper6
- Lemma-Class Veteran
- Posts: 3712
- Joined: Sat Jul 09, 2011 10:33 pm
- Projects: A Close Shave
- Location: Medford, MA
- Contact:
Re: Invalid Syntax Error
#2
Post
by trooper6 » Tue Sep 15, 2015 10:49 pm
So the first thing that stood out to me in your code was this:
Code: Select all
default chose = ""
default roommate = ""
default chase = ""
default dinner_dylan = ""
$ alex = False
So…what is happening here?
Why are those defaults indented? Why is the line with the $ not indented? Why is alex not defined with default?
I would imagine that the code should look more like:
Code: Select all
default chose = ""
default roommate = ""
default chase = ""
default dinner_dylan = ""
default alex = False
label start:
"Blah Blah Blah"
But let’s get to what is probably the most relevant question. Do you use the name «alex» for two different things? Do you have this variable called alex and also a character called alex? Because you shouldn’t be reusing your variable names.
A Close Shave:
*Last Thing Done (Aug 17): Finished coding emotions and camera for 4/10 main labels.
*Currently Doing: Coding of emotions and camera for the labels—On 5/10
*First Next thing to do: Code in all CG and special animation stuff
*Next Next thing to do: Set up film animation
*Other Thing to Do: Do SFX and Score (maybe think about eye blinks?)
Check out My Clock Cookbook Recipe: http://lemmasoft.renai.us/forums/viewto … 51&t=21978
-
RayDizzle
- Regular
- Posts: 25
- Joined: Tue Jul 28, 2015 9:49 pm
- Deviantart: Gem2012
- Location: New Zealand
- Contact:
Re: Invalid Syntax Error
#3
Post
by RayDizzle » Tue Sep 15, 2015 10:56 pm
No, I’m not reusing the names. Also, I re-wrote my coding the way you had shown me and now I have a new error:
Code: Select all
I'm sorry, but an uncaught exception occurred.
While running game code:
File "game/script.rpy", line 1767, in script
jump alexhall
SyntaxError: invalid syntax (script.rpy, line 1782)
So it seems that there’s something wrong with the jump? I’m totally stumped.
P.S. Thanks for helping out (I’m terrible at this stuff as you can see)
-
trooper6
- Lemma-Class Veteran
- Posts: 3712
- Joined: Sat Jul 09, 2011 10:33 pm
- Projects: A Close Shave
- Location: Medford, MA
- Contact:
Re: Invalid Syntax Error
#4
Post
by trooper6 » Wed Sep 16, 2015 12:01 am
I’m not sure why you’d get that error. Perhaps post the code around line 1782? Including some lines before and some lines afterwards.
I took the code you provided and put it into a project and didn’t get any errors. Of course I did take the initial declaration of variables and put it outside of a label like you are supposed to, and I simplified some of your if statements. But it is working.
So…what is happening in your script?
Code: Select all
# You can place the script of your game in this file.
# Declare images below this line, using the image statement.
# eg. image eileen happy = "eileen_happy.png"
# Declare characters used by this game.
define e = Character('Eileen', color="#c8ffc8")
# Declare your variables here
default chose = ""
default roommate = ""
default chase = ""
default dinner_dylan = ""
default alex = False
label start:
$ dinner_dylan = False
#[Bunch of text]
$ chose = "dinner_dylan"
#[Text]
$ roommate = "dylan"
#[Text]
$ chase = "yes"
#[Text]
$ chose = "brekkiealex"
label home:
hide shop
"I walked back to my dormroom to relax."
if alex == True or chose == "brekkiealex":
jump alexhall
elif dinner_dylan == True or chose == "dinner_dylan":
"When I got back to my dormroom, Dylan was leaning against the wall of the corridor."
jump dylanhall
elif roommate == "dylan":
"When I got to my new room, Dylan was leaning against the wall of the corridor."
jump dylanroomhall
elif chase = "yes":
jump chaseyes
else:
"On my way back, I saw this kid hanging around in the hallway."
jump nobody
label alexhall:
"You see Alex in the hall. Your game is over."
return
label dylanhall:
"Dylan talks to you a bit. Your game is over."
return
label dylanroomhall:
"Dylan, your roommate talks to you a bit. Your game is over."
return
label chaseyes:
"You decide to go chase after your best freinds. Your game is over."
return
label nobody:
"And you end up not dating and totally find with it. Your game is over."
return
A Close Shave:
*Last Thing Done (Aug 17): Finished coding emotions and camera for 4/10 main labels.
*Currently Doing: Coding of emotions and camera for the labels—On 5/10
*First Next thing to do: Code in all CG and special animation stuff
*Next Next thing to do: Set up film animation
*Other Thing to Do: Do SFX and Score (maybe think about eye blinks?)
Check out My Clock Cookbook Recipe: http://lemmasoft.renai.us/forums/viewto … 51&t=21978
-
PyTom
- Ren’Py Creator
- Posts: 15922
- Joined: Mon Feb 02, 2004 10:58 am
- Completed: Moonlight Walks
- Projects: Ren’Py
- IRC Nick: renpytom
- Github: renpytom
- itch: renpytom
- Location: Kings Park, NY
- Contact:
Re: Invalid Syntax Error
#5
Post
by PyTom » Wed Sep 16, 2015 12:18 am
Just by the name of the error, it sure looks like there is some Ren’Py code mixed in a Python block..
Supporting creators since 2004
(When was the last time you backed up your game?)
«Do good work.» — Virgil Ivan «Gus» Grissom
Software > Drama • https://www.patreon.com/renpytom
-
RayDizzle
- Regular
- Posts: 25
- Joined: Tue Jul 28, 2015 9:49 pm
- Deviantart: Gem2012
- Location: New Zealand
- Contact:
Re: Invalid Syntax Error
#6
Post
by RayDizzle » Wed Sep 16, 2015 2:13 am
I’ve made some slight adjustments and it’s somehow managed to fix itself, though I don’t know how the adjustments I made have actually changed anything. But, all in all, it’s all working now. Thanks
Как чинить SyntaxError
SyntaxError — это ошибка, которая легко может ввести в ступор начинающего программиста. Стоит забыть одну запятую или не там поставить кавычку и Python наотрез откажется запускать программу. Что ещё хуже, по выводу в консоль сложно сообразить в чём дело. Выглядят сообщения страшно и непонятно. Что с этим делать — не ясно. Вот неполный список того, что можно встретить:
- SyntaxError: invalid syntax
- SyntaxError: EOL while scanning string literal
- SyntaxError: unexpected EOF while parsing
Эта статья о том, как справиться с синтаксической ошибкой SyntaxError . Дочитайте её до конца и получите безотказный простой алгоритм действий, что поможет вам в трудную минуту — ваш спасательный круг.
Работать будем с программой, которая выводит на экран список учеников. Её код выглядит немного громоздко и, возможно, непривычно. Если не всё написанное вам понятно, то не отчаивайтесь, чтению статьи это не помешает.
Ожидается примерно такой результат в консоли:
Но запуск программы приводит к совсем другому результату. Скрипт сломан:
Ошибки в программе бывают разные и каждой нужен свой особый подход. Первым делом внимательно посмотрите на вывод программы в консоль. На последней строчке написано SyntaxError: invalid syntax . Если эти слова вам не знакомы, то обратитесь за переводом к Яндекс.Переводчику:
Первое слово SyntaxError Яндекс не понял. Помогите ему и разделите слова пробелом:
Теория. Синтаксические ошибки
Программирование — это не магия, а Python — не волшебный шар. Он не умеет предсказывать будущее, у него нет доступа к секретным знаниями, это просто автомат, это программа. Узнайте как она работает, как ищет ошибки в коде, и тогда легко найдете эффективный способ отладки. Вся необходимая теория собрана в этом разделе, дочитайте до конца.
SyntaxError — это синтаксическая ошибка. Она случается очень рано, еще до того, как Python запустит программу. Вот что делает компьютер, когда вы запускаете скрипт командой python script.py :
- запускает программу python
- python считывает текст из файла script.py
- python превращает текст программы в инструкции
- python исполняет инструкции
Синтаксическая ошибка SyntaxError возникает на четвёртом этапе в момент, когда Python разбирает текст программы на понятные ему компоненты. Сложные выражения в коде он разбирает на простейшие инструкции. Вот пример кода и инструкции для него:
- создать строку ‘Евгений’
- создать словарь
- в словарь добавить ключ ‘name’ со значением ‘Евгений’
- присвоить результат переменной person
SyntaxError случается когда Python не смог разбить сложный код на простые инструкции. Зная это, вы можете вручную разбить код на инструкции, чтобы затем проверить каждую из них по отдельности. Ошибка прячется в одной из инструкций.
1. Найдите поломанное выражение
Этот шаг сэкономит вам кучу сил. Найдите в программе сломанный участок кода. Его вам предстоит разобрать на отдельные инструкции. Посмотрите на вывод программы в консоль:
Вторая строчка сообщает: File «script.py», line 9 — ошибка в файле script.py на девятой строчке. Но эта строка является частью более сложного выражения, посмотрите на него целиком:
2. Разбейте выражение на инструкции
В прошлых шагах вы узнали что сломан этот фрагмент кода:
Разберите его на инструкции:
- создать строку ‘Имя ученика: ‘
- получить у строки метод format
- вызвать функцию с двумя аргументами
- результат присвоить переменной label
Так выделил бы инструкции программист, но вот Python сделать так не смог и сломался. Пора выяснить на какой инструкции нашла коса на камень.
Теперь ваша задача переписать код так, чтобы в каждой строке программы исполнялось не более одной инструкции из списка выше. Так вы сможете тестировать их по отдельности и облегчите себе задачу. Так выглядит отделение инструкции по созданию строки:
Сразу запустите код, проверьте что ошибка осталась на прежнему месте. Приступайте ко второй инструкции:
Строка format = template.format создает новую переменную format и кладёт в неё функцию. Да, да, это не ошибка! Python разрешает класть в переменные всё что угодно, в том числе и функции. Новая переменная переменная format теперь работает как обычная функция, и её можно вызвать: format(. ) .
Снова запустите код. Ошибка появится внутри format . Под сомнением остались две инструкции:
- вызвать функцию с двумя аргументами
- результат присвоить переменной label
Скорее всего, Python не распознал вызов функции. Проверьте это, избавьтесь от последней инструкции — от создания переменной label :
Запустите код. Ошибка снова там же — внутри format . Выходит, код вызова функции написан с ошибкой, Python не смог его превратить в инструкцию.
3. Проверьте синтаксис вызова функции
Теперь вы знаете что проблема в коде, вызывающем функцию. Можно помедитировать еще немного над кодом программы, пройтись по нему зорким взглядом еще разок в надежде на лучшее. А можно поискать в сети примеры кода для сравнения.
Запросите у Яндекса статьи по фразе “Python синтаксис функции”, а в них поищите код, похожий на вызов format и сравните. Вот одна из первых статей в поисковой выдаче:
Уверен, теперь вы нашли ошибку. Победа!
Попробуйте бесплатные уроки по Python
Получите крутое код-ревью от практикующих программистов с разбором ошибок и рекомендациями, на что обратить внимание — бесплатно.
Переходите на страницу учебных модулей «Девмана» и выбирайте тему.
Источник
Visual novel syntax error
426 | уникальных посетителей |
2 | добавили в избранное |
Итак суть проблемы проста — игра предназначена для определенной языковой среды. А потому некоторые славянские или европейские языковые настройки ей совсем не по нраву. Но решить эту проблему и начать играть в эту жутко обрезанную демо-версию по цене оригинала просто:
— Заходим в меню «Пуск»
— Открываем «Панель управления»
— Переходим по ярлыку «Язык и региональные стандарты»
— Заходим во вкладку «Дополнительно»
— И в разделе «Язык программ не поддерживающих Юникод» нажимаем » Изменить язык системы».
— Теперь из выпадающего окошка нам следует сменить с «русский» на «японский» язык.
*Не волнуйтесь! Данная операция не полечет за собой тотальную смену языка системы! При перезапуске вас будет ждать все та же система и программы, поддерживающие Юникод, с тем же языком, на котором они были до всех этих манипуляций!*
— Перезагружаем компьютер, как и предлагается.
— Профит! Запускайте игру и теперь никаких проблем не возникнет!
(кроме убожества урезанных прон-сцен и вырезанных CG, но это уже совсем другая история. )
Играйте в игру и не парьтесь больше о возможных конфликтах языка системы! Так же проделанные вами действия решают не только проблему с этой игрой, но и конфликты с многими фанатскими модами или самодельными эроге на базе RPG Maker и многих других гейм-мэйкеров.
Источник
Lemma Soft Forums
Supporting creators of visual novels and story-based games since 2003.
Visit our new games list, blog aggregator, IRC channel, and Discord.
NaNoRenO ends when April begins .
Activation problem? Email PyTom.
- Unanswered topics
- Active topics
- Search
- Members
- The team
SyntaxError: invalid syntax
SyntaxError: invalid syntax
#1 Post by Night130 » Sun Apr 22, 2018 10:16 am
I’m not sure what I’m doing wrong. I’ve looked up different answers and none of them are working. I’m trying to make it so if you go on a date with Cindy, the player will say a different line in the future.
Here is the traceback:
Re: SyntaxError: invalid syntax
#2 Post by kivik » Sun Apr 22, 2018 10:32 am
Note:
You can do «if variable:» for quick variable checks — if the variable is boolean (True or False) then it’ll be evaluated the same as «if variable == True». This is true for most modern programming languages, though I’m old enough to have learnt QBasic and it confused the hell out of me when I was told I could shorten it.
You can get more advanced than that with variables, such as strings to see whether they’re empty or not (if string_var: would return True if string_var is not empty; False if string_var is «»). There’re standard conventions in most programming languages, but always make sure to read up on the language’s way of evaluating these statements
Re: SyntaxError: invalid syntax
#3 Post by Night130 » Sun Apr 22, 2018 10:58 am
Re: SyntaxError: invalid syntax
#4 Post by kivik » Sun Apr 22, 2018 1:07 pm
Источник
Lemma Soft Forums
Supporting creators of visual novels and story-based games since 2003.
Visit our new games list, blog aggregator, IRC channel, and Discord.
NaNoRenO ends when April begins .
Activation problem? Email PyTom.
- Unanswered topics
- Active topics
- Search
- Members
- The team
Invalid Syntax Error [SOLVED]
Invalid Syntax Error [SOLVED]
#1 Post by RayDizzle » Tue Sep 15, 2015 10:44 pm
Re: Invalid Syntax Error
#2 Post by trooper6 » Tue Sep 15, 2015 10:49 pm
So. what is happening here?
Why are those defaults indented? Why is the line with the $ not indented? Why is alex not defined with default?
I would imagine that the code should look more like:
Re: Invalid Syntax Error
#3 Post by RayDizzle » Tue Sep 15, 2015 10:56 pm
So it seems that there’s something wrong with the jump? I’m totally stumped.
P.S. Thanks for helping out (I’m terrible at this stuff as you can see)
Re: Invalid Syntax Error
#4 Post by trooper6 » Wed Sep 16, 2015 12:01 am
I’m not sure why you’d get that error. Perhaps post the code around line 1782? Including some lines before and some lines afterwards.
I took the code you provided and put it into a project and didn’t get any errors. Of course I did take the initial declaration of variables and put it outside of a label like you are supposed to, and I simplified some of your if statements. But it is working.
So. what is happening in your script?
Источник
Что означает ошибка SyntaxError: invalid syntax
Когда Python не может разобраться в ваших командах
Ситуация: программист взял в работу математический проект — ему нужно написать код, который будет считать функции и выводить результаты. В задании написано:
«Пусть у нас есть функция f(x,y) = xy, которая перемножает два аргумента и возвращает полученное значение».
Программист садится и пишет код:
Но при выполнении такого кода компьютер выдаёт ошибку:
File «main.py», line 13
result = x y
^
❌ SyntaxError: invalid syntax
Почему так происходит: в каждом языке программирования есть свой синтаксис — правила написания и оформления команд. В Python тоже есть свой синтаксис, по которому для умножения нельзя просто поставить рядом две переменных, как в математике. Интерпретатор находит первую переменную и думает, что ему сейчас объяснят, что с ней делать. Но вместо этого он сразу находит вторую переменную. Интерпретатор не знает, как именно нужно их обработать, потому что у него нет правила «Если две переменные стоят рядом, их нужно перемножить». Поэтому интерпретатор останавливается и говорит, что у него лапки.
Что делать с ошибкой SyntaxError: invalid syntax
В нашем случае достаточно поставить звёздочку (знак умножения в Python) между переменными — это оператор умножения, который Python знает:
В общем случае найти источник ошибки SyntaxError: invalid syntax можно так:
- Проверьте, не идут ли у вас две команды на одной строке друг за другом.
- Найдите в справочнике описание команды, которую вы хотите выполнить. Возможно, где-то опечатка.
- Проверьте, не пропущена ли команда на месте ошибки.
Практика
Попробуйте найти ошибки в этих фрагментах кода:
Источник
SyntaxError
— это ошибка, которая легко может ввести в ступор начинающего программиста. Стоит забыть одну запятую или не там поставить кавычку и Python наотрез откажется запускать программу. Что ещё хуже, по выводу в консоль сложно сообразить в чём дело. Выглядят сообщения страшно и непонятно. Что с этим делать — не ясно. Вот неполный список того, что можно встретить:
SyntaxError: invalid syntax
SyntaxError: EOL while scanning string literal
SyntaxError: unexpected EOF while parsing
Эта статья о том, как справиться с синтаксической ошибкой SyntaxError
. Дочитайте её до конца и получите безотказный простой алгоритм действий, что поможет вам в трудную минуту — ваш спасательный круг.
Работать будем с программой, которая выводит на экран список учеников. Её код выглядит немного громоздко и, возможно, непривычно. Если не всё написанное вам понятно, то не отчаивайтесь, чтению статьи это не помешает.
students = [
['Егор', 'Кузьмин'],
['Денис', 'Давыдов'],
]
for first_name, last_name in students:
label = 'Имя ученика: {first_name} {last_name}'.format(
first_name = first_name
last_name = last_name
)
print(label)
Ожидается примерно такой результат в консоли:
$ python script.py
Имя ученика: Егор Кузьмин
Имя ученика: Денис Давыдов
Но запуск программы приводит к совсем другому результату. Скрипт сломан:
$ python script.py
File "script.py", line 9
last_name = last_name
^
SyntaxError: invalid syntax
Ошибки в программе бывают разные и каждой нужен свой особый подход. Первым делом внимательно посмотрите на вывод программы в консоль. На последней строчке написано SyntaxError: invalid syntax
. Если эти слова вам не знакомы, то обратитесь за переводом к Яндекс.Переводчику:
SyntaxError: недопустимый синтаксис
SyntaxError: неверный синтаксис
Первое слово SyntaxError
Яндекс не понял. Помогите ему и разделите слова пробелом:
Syntax Error: invalid syntax
Синтаксическая ошибка: неверный синтаксис
Теория. Синтаксические ошибки
Программирование — это не магия, а Python — не волшебный шар. Он не умеет предсказывать будущее, у него нет доступа к секретным знаниями, это просто автомат, это программа. Узнайте как она работает, как ищет ошибки в коде, и тогда легко найдете эффективный способ отладки. Вся необходимая теория собрана в этом разделе, дочитайте до конца.
SyntaxError
— это синтаксическая ошибка. Она случается очень рано, еще до того, как Python запустит программу. Вот что делает компьютер, когда вы запускаете скрипт командой python script.py
:
- запускает программу
python
python
считывает текст из файлаscript.py
python
превращает текст программы в инструкцииpython
исполняет инструкции
Синтаксическая ошибка SyntaxError
возникает на четвёртом этапе в момент, когда Python разбирает текст программы на понятные ему компоненты. Сложные выражения в коде он разбирает на простейшие инструкции. Вот пример кода и инструкции для него:
person = {'name': 'Евгений'}
Инструкции:
- создать строку
'Евгений'
- создать словарь
- в словарь добавить ключ
'name'
со значением'Евгений'
- присвоить результат переменной
person
SyntaxError
случается когда Python не смог разбить сложный код на простые инструкции. Зная это, вы можете вручную разбить код на инструкции, чтобы затем проверить каждую из них по отдельности. Ошибка прячется в одной из инструкций.
1. Найдите поломанное выражение
Этот шаг сэкономит вам кучу сил. Найдите в программе сломанный участок кода. Его вам предстоит разобрать на отдельные инструкции. Посмотрите на вывод программы в консоль:
$ python script.py
File "script.py", line 9
last_name = last_name
^
SyntaxError: invalid syntax
Вторая строчка сообщает: File "script.py", line 9
— ошибка в файле script.py
на девятой строчке. Но эта строка является частью более сложного выражения, посмотрите на него целиком:
label = 'Имя ученика: {first_name} {last_name}'.format(
first_name = first_name
last_name = last_name
)
2. Разбейте выражение на инструкции
В прошлых шагах вы узнали что сломан этот фрагмент кода:
label = 'Имя ученика: {first_name} {last_name}'.format(
first_name = first_name
last_name = last_name
)
Разберите его на инструкции:
- создать строку
'Имя ученика: {first_name} {last_name}'
- получить у строки метод
format
- вызвать функцию с двумя аргументами
- результат присвоить переменной
label
Так выделил бы инструкции программист, но вот Python сделать так не смог и сломался. Пора выяснить на какой инструкции нашла коса на камень.
Теперь ваша задача переписать код так, чтобы в каждой строке программы исполнялось не более одной инструкции из списка выше. Так вы сможете тестировать их по отдельности и облегчите себе задачу. Так выглядит отделение инструкции по созданию строки:
# 1. создать строку
template = 'Имя ученика: {first_name} {last_name}'
label = template.format(
first_name = first_name
last_name = last_name
)
Сразу запустите код, проверьте что ошибка осталась на прежнему месте. Приступайте ко второй инструкции:
# 1. создать строку
template = 'Имя ученика: {first_name} {last_name}'
# 2. получить у строки метод
format = template.format
label = format(
first_name = first_name
last_name = last_name
)
Строка format = template.format
создает новую переменную format
и кладёт в неё функцию. Да, да, это не ошибка! Python разрешает класть в переменные всё что угодно, в том числе и функции. Новая переменная переменная format
теперь работает как обычная функция, и её можно вызвать: format(...)
.
Снова запустите код. Ошибка появится внутри format
. Под сомнением остались две инструкции:
- вызвать функцию с двумя аргументами
- результат присвоить переменной
label
Скорее всего, Python не распознал вызов функции. Проверьте это, избавьтесь от последней инструкции — от создания переменной label
:
# 1. создать строку
template = 'Имя ученика: {first_name} {last_name}'
# 2. получить у строки метод
format = template.format
# 3. вызвать функцию
format(
first_name = first_name
last_name = last_name
)
Запустите код. Ошибка снова там же — внутри format
. Выходит, код вызова функции написан с ошибкой, Python не смог его превратить в инструкцию.
3. Проверьте синтаксис вызова функции
Теперь вы знаете что проблема в коде, вызывающем функцию. Можно помедитировать еще немного над кодом программы, пройтись по нему зорким взглядом еще разок в надежде на лучшее. А можно поискать в сети примеры кода для сравнения.
Запросите у Яндекса статьи по фразе “Python синтаксис функции”, а в них поищите код, похожий на вызов format
и сравните. Вот одна из первых статей в поисковой выдаче:
- Функции в Python
Уверен, теперь вы нашли ошибку. Победа!
Ситуация: программист взял в работу математический проект — ему нужно написать код, который будет считать функции и выводить результаты. В задании написано:
«Пусть у нас есть функция f(x,y) = xy, которая перемножает два аргумента и возвращает полученное значение».
Программист садится и пишет код:
a = 10
b = 15
result = 0
def fun(x,y):
return x y
result = fun(a,b)
print(result)
Но при выполнении такого кода компьютер выдаёт ошибку:
File "main.py", line 13
result = x y
^
❌ SyntaxError: invalid syntax
Почему так происходит: в каждом языке программирования есть свой синтаксис — правила написания и оформления команд. В Python тоже есть свой синтаксис, по которому для умножения нельзя просто поставить рядом две переменных, как в математике. Интерпретатор находит первую переменную и думает, что ему сейчас объяснят, что с ней делать. Но вместо этого он сразу находит вторую переменную. Интерпретатор не знает, как именно нужно их обработать, потому что у него нет правила «Если две переменные стоят рядом, их нужно перемножить». Поэтому интерпретатор останавливается и говорит, что у него лапки.
Что делать с ошибкой SyntaxError: invalid syntax
В нашем случае достаточно поставить звёздочку (знак умножения в Python) между переменными — это оператор умножения, который Python знает:
a = 10
b = 15
result = 0
def fun(x,y):
return x * y
result = fun(a,b)
print(result)
В общем случае найти источник ошибки SyntaxError: invalid syntax можно так:
- Проверьте, не идут ли у вас две команды на одной строке друг за другом.
- Найдите в справочнике описание команды, которую вы хотите выполнить. Возможно, где-то опечатка.
- Проверьте, не пропущена ли команда на месте ошибки.
Практика
Попробуйте найти ошибки в этих фрагментах кода:
x = 10 y = 15
def fun(x,y):
return x * y
try:
a = 100
b = "PythonRu"
assert a = b
except AssertionError:
print("Исключение AssertionError.")
else:
print("Успех, нет ошибок!")
Вёрстка:
Кирилл Климентьев
Когда пишу функцию происходит ошибка invalid syntax, помогите пожалуйста!
Sublime выделяет так:
import pygame
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
bg = pygame.image.load('bg.jpg')
class Player(pygame.sprite.Sprite):
idle = True
left = False
right = False
def __init__(self):
super.__init__()
self.image = pygame.image.load('idle.png')
self.rect = self.image.get_rect()
self.change_x = 0
self.change_y = 0
def update(self):
self.calc_gravity()
self.rect.x += self.change_x
block_hit_list = pygame.sprite.spritecollide(
self, self.level.platform_list, False)
for block in block_hit_list:
if self.change_x > 0:
self.rect.right = block.rect.left
elif self.change_x < 0:
self.rect.left = block.rect.right
self.rect.y += self.change_y
block_hit_list = pygame.sprite.spritecollide(
self, self.level.platform_list, False)
for block in block_hit_list:
if self.change_y > 0:
self.rect.bottom = block.rect.top
elif self.change_y < 0:
self.rect.top = block.rect.bottom
def calc_grav(self):
if self.change_y == 0:
self.change_y = 1
else:
self.change_y += .95
if self.rect.y >= SCREEN_HEIGHT - self.rect.height and self.change_y >= 0:
self.change_y = 0
self.rect.y = SCREEN_HEIGHT - self.rect.height
def jump(self):
self.rect.y += 10
platform_hit_list = pygame.sprite.spritecollide(
self, self.level.platform_list, False)
self.rect.y -= 10
if len(platform_hit_list) > 0 or self.rect.bottom >= SCREEN_HEIGHT:
self.change_y = -16
def go_left(self):
self.change_x = -9
if (not self.left):
self.image = pygame.image.load('left.png')
self.idle = False
self.left = True
self.right = False
def go_right(self):
self.change_x = 9
if (not self.right):
self.image = pygame.image.load('left.png')
self.idle = False
self.left = False
self.right = True
def stop(self):
self.change_x = 0
self.image = pygame.image.load('idle.png')
self.idle = True
self.left = False
self.right = False
class Block(pygame.sprite.Sprite):
def __init__(self, width, height):
super().__init__()
self.image = pygame.image.load('block.png')
self.rect = self.image.get_rect
class Level(object):
def __init__(self, player):
self.patforms = pygame.sprite.Group()
self.player = player
def update(self):
self.platform_list.update()
def draw(self, screen):
screen.blit(bg, (0, 0))
self.platform_list.draw(screen)
class Level_01(Level):
def __init__(self, player):
Level.__init__(self, player)
level = [
[25, 24, 500, 500],
[25, 24, 200, 400],
[25, 24, 600, 300],
]
for platform in level:
block = Platform(platform[0], platform[1])
block.rect.x = platform[2]
block.rect.y = platform[3]
block.player = self.player
self.platform_list.add(block
def main():
pygame.init()
size=[SCREEN_WIDTH, SCREEN_HEIGHT]
screen=pygame.display.set_mode(size)
pygame.display.set_caption("Game")
player=Player()
level_list=[]
level_list.append(Level_01(player))
current_level_no=0
current_level=level_list[current_level_no]
active_sprite_list=pygame.sprite.Group()
player.level=current_level
player.rect.x=340
player.rect.y=SCREEN_HEIGHT - player.rect.height
active_sprite_list.add(player)
clock=pygame.time.Clock()
done=False
while not done:
for event in pygame.event.get():
if event.type == pygame.QUIT:
done=True
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_a:
player.go_left()
if event.key == pygame.K_d:
player.go_right()
if event.key == pygame.K_SPACE:
player.jump()
current_level.draw(screen)
active_sprite_list.draw(screen)
clock.tick(25)
pygame.display.flip()
pygame.quit()
Ошибка:
File "D:VoxelProgrammingProjectsGameScriptsmain.py", line 126
def main():
^
SyntaxError: invalid syntax
stu_dent 0 / 0 / 0 Регистрация: 18.02.2011 Сообщений: 23 |
||||
1 |
||||
25.02.2011, 15:54. Показов 9523. Ответов 10 Метки нет (Все метки)
написал вот ету прожку на visual prolog 7.3 Создайте предикат, вычисляющий сумму цифр натурального числа.
во время компиляции выдает ошибку main.pro(20,1) error c161: Syntax error: ‘.’ is expected в чом ошибка???
__________________
0 |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
25.02.2011, 15:54 |
10 |
2505 / 1479 / 37 Регистрация: 14.09.2009 Сообщений: 2,740 |
|
25.02.2011, 16:21 |
2 |
Ну Вам же сказано в чем, и даже номер строки указан, Вы в 19й строке точку заккоментили.
1 |
stu_dent 0 / 0 / 0 Регистрация: 18.02.2011 Сообщений: 23 |
||||
25.02.2011, 16:45 [ТС] |
3 |
|||
ЗА ОТВЕТ БЛАГОДАРЕН! ну вот после того как поправил код то начали вылазить другие ошибки…
вот ошибки: ПОЖАЛУЙСТА ПОМОГИТЕ ИСПРАВИТЬ!
0 |
2505 / 1479 / 37 Регистрация: 14.09.2009 Сообщений: 2,740 |
|
25.02.2011, 16:57 |
4 |
Первая ошибка значит, что первый параметр значиться как выходной, а Вы пытаетесь его с чем-то сравнивать. Надо так писать sg: (integer,integer) procedure (i,o). Вторая ошибка аналогично, а третья и четвертая потому что в первом правиле надо M на N поменять.
1 |
0 / 0 / 0 Регистрация: 18.02.2011 Сообщений: 23 |
|
25.02.2011, 17:11 [ТС] |
5 |
Первая ошибка значит, что первый параметр значиться как выходной, а Вы пытаетесь его с чем-то сравнивать. Надо так писать sg: (integer,integer) procedure (i,o). Вторая ошибка аналогично, а третья и четвертая потому что в первом правиле надо M на N поменять. ОЧЕНЬ БЛАГОДАРЕН ВАМ ЗА ТО ЧТО ВЫ ОТКЛИКНУЛИСЬ! ну все-таки было бы неплохо помочь мне поправить код — ну очень сильно прошу!
0 |
Грымзик 2505 / 1479 / 37 Регистрация: 14.09.2009 Сообщений: 2,740 |
||||
25.02.2011, 17:17 |
6 |
|||
Ой, могли бы и самостоятельно, я же все понятно указала
1 |
stu_dent 0 / 0 / 0 Регистрация: 18.02.2011 Сообщений: 23 |
||||
25.02.2011, 17:22 [ТС] |
7 |
|||
Ой, могли бы и самостоятельно, я же все понятно указала
после того как ВЫ поправили код, я попробовал запустить его — а тут такое, аж целых 28 ошибок!
0 |
2505 / 1479 / 37 Регистрация: 14.09.2009 Сообщений: 2,740 |
|
25.02.2011, 17:25 |
8 |
А, ну это я просто не все скопировала, добавьте в конце
1 |
0 / 0 / 0 Регистрация: 18.02.2011 Сообщений: 23 |
|
25.02.2011, 17:30 [ТС] |
9 |
А, ну это я просто не все скопировала, добавьте в конце о, прикольно — все заработало… Уважаемый модератор Грымзик подскажыте как можна с вами связаться? просто еше нужна будет помощь по написанию 8 программ на visual prolog 7.3, не за бесплатно соответственно!
0 |
2505 / 1479 / 37 Регистрация: 14.09.2009 Сообщений: 2,740 |
|
25.02.2011, 18:00 |
10 |
Лучше пишите то, что сможете, а мы будем стараться помочь, так как в 7.* я не особо разбираюсь и не могу гарантировать, что напишу.
1 |
0 / 0 / 0 Регистрация: 18.02.2011 Сообщений: 23 |
|
25.02.2011, 18:04 [ТС] |
11 |
Лучше пишите то, что сможете, а мы будем стараться помочь, так как в 7.* я не особо разбираюсь и не могу гарантировать, что напишу. ок! СПАСИБО!
0 |