Ошибка синтаксиса в Cloud9 IDE? Это ошибка или я сделал что-то не так?

#python #syntax

#python #синтаксис

Вопрос:

Я полагаю, что обнаружил ошибку в Cloud9 IDE, поскольку я получаю синтаксическую ошибку в следующем коде:

     for x in optionMenu:
            print x[0], x[1]
        action = raw_input ("Please select an action: ")
        if action == "1":
            direction = directionMenu()
            if direction == "East":
                validAction = True
                print "You raise the portcullis and enter the palace."
                room2(character)
            else:
                print "You can't go that way!"
        elif action == "2":
            characterMenu(character)
        elif action == "3":
            if searched_yet1 == False:
                skill_pass = skillCheck(1, character.search)
                if skill_pass ==  True:
                    print "The double portcullis seems moveable with some effort."
                    searched_yet1 = True
                else:
                    print "You fail to find anything worthy of note. "
                    searched_yet1 = True
            else:
                print "You have already attempted that action!"
        elif action == "4":
            if listened_yet1 == False:
                skill_pass = skillCheck(5, character.listen)
                if skill_pass == True:
                    print "Sounds coming from deep in the palace can be heard every few minutes."
                    listened_yet1 = True

                else:
                    print "You fail to hear anything worth of note. "
                    listened_yet1 = True
            else:
                print "You have already attempted that action!"
  

Синтаксическая ошибка возникает в "elif action == "4": . Я делаю что-то не так или я обнаружил ошибку в Cloud9 IDE? Я попытался отрегулировать интервал. Есть ли ошибка в приведенном выше операторе печати?

РЕДАКТИРОВАТЬ: версия Python 2.7.6, ошибка

 File "/home/ubuntu/workspace/dungeonMap.py", line 63
    elif action == "4":
   ^
SyntaxError: invalid syntax
  

Ответ №1:

Когда я изучаю ваш код, опубликованный здесь, строке elif action == 4: предшествуют 4 пробела, а затем 2 табуляции. Смешивать пробелы и табуляции в Python — очень плохая идея. Я также вижу, что некоторые строки, такие как предыдущая, используют только пробелы для отступов.

Замените эти две вкладки, а также любые другие, пробелами и настройте вашу IDE на использование только пробелов при отступах. Посмотрите, решит ли это проблему.


Присмотревшись повнимательнее, я теперь вижу прямую проблему. Я считаю, что Python обрабатывает табуляцию как 8 пробелов, независимо от того, как она отображается в вашем редакторе. Учитывая это, ваша строка на две строки выше вашей проблемной строки является else: но с отступом, чтобы завершить if action == "1": строку, а не if searched_yet1 == False: строку, которую вы намеревались. Затем Python видит вашу elif action == 4: строку как an elif без соответствующего предшествующего if .

Опять же, замена всех этих табуляций пробелами, а затем правильное отображение отступов решит эту проблему и другие.

Комментарии:

1. Я понятия не имел, что табуляции и пробелы влияют на что-либо! Я слышал об этих вещах, но понятия не имел. Я перенастрою свою среду IDE

2. Если вы не знали, что отступы — очень важная часть синтаксиса Python, как вам удалось написать свой код до сих пор?

3. Ну, я не знал, что табуляции и пробелы — это разные вещи, я имею в виду.