Что означает ошибка SyntaxError: ‘break’ outside loop
Это значит, что мы пытаемся выйти из цикла, которого нет
Это значит, что мы пытаемся выйти из цикла, которого нет
Ситуация: мы пишем опросник на Python, и нам важно, чтобы его мог пройти только совершеннолетний. Для этого мы добавляем в код такую логику:
- Спрашиваем про возраст.
- Смотрим, он больше 18 или нет.
- Если нет — останавливаем программу.
- Пишем дальше код, который будет работать, если участнику есть 18 лет и программа не остановилась.
На Python это выглядит так:
# запрашиваем возраст
age_txt = input('Введите свой возраст: ')
# переводим введённое значение в число
age = int(age_txt)
# если меньше 18 лет
if age < 18:
# выводим сообщение
print('Вы не можете участвовать в опросе')
# выходим из программы
break
# спрашиваем имя
name_txt = input('Как вас зовут: ')
Вроде всё логично, но после запуска мы получаем ошибку:
❌ SyntaxError: ‘break’ outside loop
Что это значит: в отличие от многих других языков, команда break в Python используется только для выхода из цикла, а не выхода из программы в целом.
Когда встречается: когда мы хотим выйти из программы в середине её работы, но не знаем как.
Что делать с ошибкой SyntaxError: ‘break’ outside loop
Всё зависит от того, что вы хотите сделать.
Если вы хотите выйти из цикла, то break
служит как раз для этого — нужно только убедиться, что всё в порядке с отступами. Например, здесь мы выйдем из цикла, как только переменная станет больше 9:
for i in range(10):
print(i)
if i > 8:
break
А если вы хотите закончить работу программы в произвольном месте, то нужно вместо break
использовать команду exit()
. Она штатно завершит все процессы в коде и остановит программу. Это как раз подойдёт для нашего примера с опросником — теперь программа остановится, если возраст будет меньше 18:
# запрашиваем возраст
age_txt = input('Введите свой возраст: ')
# переводим введённое значение в число
age = int(age_txt)
# если меньше 18 лет
if age < 18:
# выводим сообщение
print('Вы не можете участвовать в опросе')
# выходим из программы
exit()
# спрашиваем имя
name_txt = input('Как вас зовут: ')
Вёрстка:
Кирилл Климентьев
Получите ИТ-профессию
В «Яндекс Практикуме» можно стать разработчиком, тестировщиком, аналитиком и менеджером цифровых продуктов. Первая часть обучения всегда бесплатная, чтобы попробовать и найти то, что вам по душе. Дальше — программы трудоустройства.
Начать карьеру в ИТ
SkyLoVeK 0 / 0 / 0 Регистрация: 10.10.2020 Сообщений: 22 |
||||
1 |
||||
15.11.2020, 16:38. Показов 13542. Ответов 3 Метки нет (Все метки)
При запуске кода выдает ошибку «break» outside loop (Линия 9)
Почему так происходит?
__________________
0 |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
15.11.2020, 16:38 |
3 |
Модератор 33878 / 18905 / 3981 Регистрация: 12.02.2012 Сообщений: 31,695 Записей в блоге: 13 |
|
15.11.2020, 16:43 |
2 |
SkyLoVeK, проверил. Все работает.
1 |
0 / 0 / 0 Регистрация: 10.10.2020 Сообщений: 22 |
|
15.11.2020, 17:17 [ТС] |
3 |
Серьезно? Странно…
0 |
5403 / 3827 / 1214 Регистрация: 28.10.2013 Сообщений: 9,554 Записей в блоге: 1 |
|
15.11.2020, 20:21 |
4 |
РешениеSkyLoVeK, Добавлено через 6 минут
1 |
- Оператор Python continue используется для пропуска выполнения текущей итерации цикла.
- Мы не можем использовать его вне цикла, он выдаст ошибку как «SyntaxError: ‘continue’ external loop».
- Мы можем использовать его с циклами for и while.
- Присутствует во вложенном цикле, он пропускает выполнение только внутреннего цикла.
- «Continue» — зарезервированное ключевое слово в Python.
- Как правило, оператор continue используется с оператором if, чтобы определить условие пропуска текущего выполнения цикла.
Синтаксис оператора
Синтаксис оператора continue:
continue
Мы не можем использовать какие-либо опции, метки или условия.
Примеры
Давайте посмотрим на несколько примеров использования оператора continue в Python.
1. Как продолжить цикл for?
Допустим, у нас есть последовательность целых чисел. Мы должны пропустить обработку, если значение равно 3. Мы можем реализовать этот сценарий, используя цикл for и оператор continue.
t_ints = (1, 2, 3, 4, 5) for i in t_ints: if i == 3: continue print(f'Processing integer {i}') print("Done")
Вывод:
2. Совместно с циклом while
Вот простой пример использования оператора continue с циклом while.
count = 10 while count > 0: if count % 3 == 0: count -= 1 continue print(f'Processing Number {count}') count -= 1
Вывод:
3. Пример с вложенным циклом
Допустим, у нас есть список кортежей для обработки. Кортеж содержит целые числа. Обработку следует пропустить при следующих условиях.
- пропустить обработку кортежа, если его размер больше 2.
- пропустить выполнение, если целое число равно 3.
Мы можем реализовать эту логику с помощью вложенных циклов for. Нам нужно будет использовать два оператора continue для выполнения вышеуказанных условий.
list_of_tuples = [(1, 2), (3, 4), (5, 6, 7)] for t in list_of_tuples: # don't process tuple with more than 2 elements if len(t) > 2: continue for i in t: # don't process if the tuple element value is 3 if i == 3: continue print(f'Processing {i}')
Вывод:
Многие популярные языки программирования поддерживают помеченный оператор continue. В основном он используется для пропуска итерации внешнего цикла в случае вложенных циклов. Однако Python не поддерживает помеченный оператор continue.
PEP 3136 был сделан, чтобы добавить поддержку метки для оператора continue. Но он был отклонен, потому что это очень редкий сценарий, который добавит ненужной сложности языку. Мы всегда можем написать условие во внешнем цикле, чтобы пропустить текущее выполнение.
Оператор break
- Оператор break в Python используется для выхода из текущего цикла.
- Мы не можем использовать оператор break вне цикла, он выдаст ошибку как «SyntaxError: ‘break’ external loop».
- Мы можем использовать его с циклами for и while.
- Если оператор break присутствует во вложенном цикле, он завершает внутренний цикл.
- «Break» — зарезервированное ключевое слово в Python.
Блок-схема оператора break
Синтаксис оператора break
Синтаксис оператора break:
break
Мы не можем использовать какие-либо опции, метки или условия.
Примеры
1. оператор break с циклом for
Допустим, у нас есть последовательность целых чисел. Мы должны обрабатывать элементы последовательности один за другим. Если мы встречаем «3», то обработка должна быть остановлена. Мы можем использовать цикл for для итерации и оператор break с условием if, чтобы реализовать это.
t_ints = (1, 2, 3, 4, 5) for i in t_ints: if i == 3: break print(f'Processing {i}') print("Done")
Вывод:
2. Оператор break с циклом while
count = 10 while count > 0: print(count) if count == 5: break count -= 1
Вывод:
3. С вложенным циклом
Вот пример оператора break во вложенном цикле.
list_of_tuples = [(1, 2), (3, 4), (5, 6)] for t in list_of_tuples: for i in t: if i == 3: break print(f'Processing {i}')
Вывод:
Однако Python не поддерживает помеченный оператор break. Он был убран, потому что это добавит ненужной сложности языку. Для этого сценария есть лучшая альтернатива — переместите код в функцию и добавьте оператор return.
Python известен своим простым синтаксисом. Однако, когда вы изучаете Python в первый раз или когда вы попали на Python с большим опытом работы на другом языке программирования, вы можете столкнуться с некоторыми вещами, которые Python не позволяет. Если вы когда-либо получали + SyntaxError +
при попытке запустить код Python, то это руководство может вам помочь. В этом руководстве вы увидите общие примеры неправильного синтаксиса в Python и узнаете, как решить эту проблему.
Неверный синтаксис в Python
Когда вы запускаете ваш код Python, интерпретатор сначала анализирует его, чтобы преобразовать в байтовый код Python, который он затем выполнит. Интерпретатор найдет любой недопустимый синтаксис в Python на этом первом этапе выполнения программы, также известном как этап синтаксического анализа . Если интерпретатор не может успешно проанализировать ваш код Python, это означает, что вы использовали неверный синтаксис где-то в вашем коде. Переводчик попытается показать вам, где произошла эта ошибка.
Когда вы изучаете Python в первый раз, может быть неприятно получить + SyntaxError +
. Python попытается помочь вам определить, где в вашем коде указан неверный синтаксис, но предоставляемый им traceback может немного сбить с толку. Иногда код, на который он указывает, вполне подходит.
*Примечание:* Если ваш код *синтаксически* правильный, то вы можете получить другие исключения, которые не являются `+ SyntaxError +`. Чтобы узнать больше о других исключениях Python и о том, как их обрабатывать, ознакомьтесь с https://realpython.com/python-exceptions/[Python Exceptions: Введение].
Вы не можете обрабатывать неправильный синтаксис в Python, как и другие исключения. Даже если вы попытаетесь обернуть блок + try +
и + кроме +
вокруг кода с неверным синтаксисом, вы все равно увидите, что интерпретатор вызовет + SyntaxError +
.
+ SyntaxError +
Исключение и трассировка
Когда интерпретатор обнаруживает неверный синтаксис в коде Python, он вызовет исключение + SyntaxError +
и предоставит трассировку с некоторой полезной информацией, которая поможет вам отладить ошибку. Вот некоторый код, который содержит недопустимый синтаксис в Python:
1 # theofficefacts.py
2 ages = {
3 'pam': 24,
4 'jim': 24
5 'michael': 43
6 }
7 print(f'Michael is {ages["michael"]} years old.')
Вы можете увидеть недопустимый синтаксис в литерале словаря в строке 4. Во второй записи + 'jim' +
пропущена запятая. Если вы попытаетесь запустить этот код как есть, вы получите следующую трассировку:
$ python theofficefacts.py
File "theofficefacts.py", line 5
'michael': 43
^
SyntaxError: invalid syntax
Обратите внимание, что сообщение трассировки обнаруживает ошибку в строке 5, а не в строке 4. Интерпретатор Python пытается указать, где находится неправильный синтаксис. Тем не менее, он может только указать, где он впервые заметил проблему. Когда вы получите трассировку + SyntaxError +
и код, на который указывает трассировка, выглядит нормально, тогда вы захотите начать движение назад по коду, пока не сможете определить, что не так.
В приведенном выше примере нет проблемы с запятой, в зависимости от того, что следует после нее. Например, нет проблемы с отсутствующей запятой после + 'michael' +
в строке 5. Но как только переводчик сталкивается с чем-то, что не имеет смысла, он может лишь указать вам на первое, что он обнаружил, что он не может понять.
*Примечание:* В этом руководстве предполагается, что вы знакомы с основами *tracebacks* в Python. Чтобы узнать больше о трассировке Python и о том, как их читать, ознакомьтесь с https://realpython.com/python-traceback/[Understanding Python Traceback].
Существует несколько элементов трассировки + SyntaxError +
, которые могут помочь вам определить, где в вашем коде содержится неверный синтаксис:
-
Имя файла , где встречается неверный синтаксис
-
Номер строки и воспроизводимая строка кода, где возникла проблема
-
Знак (
+ ^ +
) в строке ниже воспроизводимого кода, который показывает точку в коде, которая имеет проблему -
Сообщение об ошибке , которое следует за типом исключения
+ SyntaxError +
, которое может предоставить информацию, которая поможет вам определить проблему
В приведенном выше примере имя файла было + theofficefacts.py +
, номер строки был 5, а каретка указывала на закрывающую кавычку из словарного ключа + michael +
. Трассировка + SyntaxError +
может не указывать на реальную проблему, но она будет указывать на первое место, где интерпретатор не может понять синтаксис.
Есть два других исключения, которые вы можете увидеть в Python. Они эквивалентны + SyntaxError +
, но имеют разные имена:
-
+ +
IndentationError -
+ +
TabError
Оба эти исключения наследуются от класса + SyntaxError +
, но это особые случаи, когда речь идет об отступе. + IndentationError +
возникает, когда уровни отступа вашего кода не совпадают. + TabError +
возникает, когда ваш код использует и табуляцию, и пробелы в одном файле. Вы познакомитесь с этими исключениями более подробно в следующем разделе.
Общие проблемы с синтаксисом
Когда вы впервые сталкиваетесь с + SyntaxError +
, полезно знать, почему возникла проблема и что вы можете сделать, чтобы исправить неверный синтаксис в вашем коде Python. В следующих разделах вы увидите некоторые из наиболее распространенных причин, по которым может быть вызвано «+ SyntaxError +», и способы их устранения.
Неправильное использование оператора присваивания (+ = +
)
В Python есть несколько случаев, когда вы не можете назначать объекты. Некоторые примеры присваивают литералам и вызовам функций. В приведенном ниже блоке кода вы можете увидеть несколько примеров, которые пытаются это сделать, и получающиеся в результате трассировки + SyntaxError +
:
>>>
>>> len('hello') = 5
File "<stdin>", line 1
SyntaxError: can't assign to function call
>>> 'foo' = 1
File "<stdin>", line 1
SyntaxError: can't assign to literal
>>> 1 = 'foo'
File "<stdin>", line 1
SyntaxError: can't assign to literal
Первый пример пытается присвоить значение + 5 +
вызову + len () +
. Сообщение + SyntaxError +
очень полезно в этом случае. Он говорит вам, что вы не можете присвоить значение вызову функции.
Второй и третий примеры пытаются присвоить литералам строку и целое число. То же правило верно и для других литеральных значений. И снова сообщения трассировки указывают, что проблема возникает, когда вы пытаетесь присвоить значение литералу.
*Примечание:* В приведенных выше примерах отсутствует повторяющаяся строка кода и каретка (`+ ^ +`), указывающая на проблему в трассировке. Исключение и обратная трассировка, которые вы видите, будут другими, когда вы находитесь в REPL и пытаетесь выполнить этот код из файла. Если бы этот код был в файле, то вы бы получили повторяющуюся строку кода и указали на проблему, как вы видели в других случаях в этом руководстве.
Вероятно, ваше намерение не состоит в том, чтобы присвоить значение литералу или вызову функции. Например, это может произойти, если вы случайно пропустите дополнительный знак равенства (+ = +
), что превратит назначение в сравнение. Сравнение, как вы можете видеть ниже, будет правильным:
>>>
>>> len('hello') == 5
True
В большинстве случаев, когда Python сообщает вам, что вы делаете присвоение чему-то, что не может быть назначено, вы сначала можете проверить, чтобы убедиться, что оператор не должен быть логическим выражением. Вы также можете столкнуться с этой проблемой, когда пытаетесь присвоить значение ключевому слову Python, о котором вы расскажете в следующем разделе.
Неправильное написание, отсутствие или неправильное использование ключевых слов Python
Ключевые слова Python — это набор защищенных слов , которые имеют особое значение в Python. Это слова, которые вы не можете использовать в качестве идентификаторов, переменных или имен функций в своем коде. Они являются частью языка и могут использоваться только в контексте, который допускает Python.
Существует три распространенных способа ошибочного использования ключевых слов:
-
Неправильное написание ключевое слово
-
Отсутствует ключевое слово
-
Неправильное использование ключевого слова
Если вы неправильно написали ключевое слово в своем коде Python, вы получите + SyntaxError +
. Например, вот что происходит, если вы пишете ключевое слово + for +
неправильно:
>>>
>>> fro i in range(10):
File "<stdin>", line 1
fro i in range(10):
^
SyntaxError: invalid syntax
Сообщение читается как + SyntaxError: неверный синтаксис +
, но это не очень полезно. Трассировка указывает на первое место, где Python может обнаружить, что что-то не так. Чтобы исправить эту ошибку, убедитесь, что все ваши ключевые слова Python написаны правильно.
Другая распространенная проблема с ключевыми словами — это когда вы вообще их пропускаете:
>>>
>>> for i range(10):
File "<stdin>", line 1
for i range(10):
^
SyntaxError: invalid syntax
Еще раз, сообщение об исключении не очень полезно, но трассировка действительно пытается указать вам правильное направление. Если вы отойдете от каретки, то увидите, что ключевое слово + in +
отсутствует в синтаксисе цикла + for +
.
Вы также можете неправильно использовать защищенное ключевое слово Python. Помните, что ключевые слова разрешено использовать только в определенных ситуациях. Если вы используете их неправильно, у вас будет неправильный синтаксис в коде Python. Типичным примером этого является использование https://realpython.com/python-for-loop/#the-break-and-continue-statements [+ continue +
или + break +
] вне цикла. Это может легко произойти во время разработки, когда вы реализуете вещи и когда-то перемещаете логику за пределы цикла:
>>>
>>> names = ['pam', 'jim', 'michael']
>>> if 'jim' in names:
... print('jim found')
... break
...
File "<stdin>", line 3
SyntaxError: 'break' outside loop
>>> if 'jim' in names:
... print('jim found')
... continue
...
File "<stdin>", line 3
SyntaxError: 'continue' not properly in loop
Здесь Python отлично говорит, что именно не так. Сообщения " 'break' вне цикла "
и " 'continue' не в цикле должным образом "
помогут вам точно определить, что делать. Если бы этот код был в файле, то Python также имел бы курсор, указывающий прямо на неправильно использованное ключевое слово.
Другой пример — если вы пытаетесь назначить ключевое слово Python переменной или использовать ключевое слово для определения функции:
>>>
>>> pass = True
File "<stdin>", line 1
pass = True
^
SyntaxError: invalid syntax
>>> def pass():
File "<stdin>", line 1
def pass():
^
SyntaxError: invalid syntax
Когда вы пытаетесь присвоить значение + pass +
, или когда вы пытаетесь определить новую функцию с именем + pass +
, вы получите ` + SyntaxError + и снова увидеть сообщение
+ «неверный синтаксис» + `.
Может быть немного сложнее решить этот тип недопустимого синтаксиса в коде Python, потому что код выглядит хорошо снаружи. Если ваш код выглядит хорошо, но вы все еще получаете + SyntaxError +
, то вы можете рассмотреть возможность проверки имени переменной или имени функции, которое вы хотите использовать, по списку ключевых слов для версии Python, которую вы используете.
Список защищенных ключевых слов менялся с каждой новой версией Python. Например, в Python 3.6 вы можете использовать + await +
в качестве имени переменной или имени функции, но в Python 3.7 это слово было добавлено в список ключевых слов. Теперь, если вы попытаетесь использовать + await +
в качестве имени переменной или функции, это вызовет + SyntaxError +
, если ваш код для Python 3.7 или более поздней версии.
Другим примером этого является + print +
, который отличается в Python 2 от Python 3:
Version | print Type |
Takes A Value |
---|---|---|
Python 2 |
keyword |
no |
Python 3 |
built-in function |
yes |
+ print +
— это ключевое слово в Python 2, поэтому вы не можете присвоить ему значение. Однако в Python 3 это встроенная функция, которой можно присваивать значения.
Вы можете запустить следующий код, чтобы увидеть список ключевых слов в любой версии Python, которую вы используете:
import keyword
print(keyword.kwlist)
+ keyword +
также предоставляет полезную + keyword.iskeyword () +
. Если вам просто нужен быстрый способ проверить переменную + pass +
, то вы можете использовать следующую однострочную строку:
>>>
>>> import keyword; keyword.iskeyword('pass')
True
Этот код быстро сообщит вам, является ли идентификатор, который вы пытаетесь использовать, ключевым словом или нет.
Отсутствующие скобки, скобки и цитаты
Часто причиной неправильного синтаксиса в коде Python являются пропущенные или несовпадающие закрывающие скобки, скобки или кавычки. Их может быть трудно обнаружить в очень длинных строках вложенных скобок или длинных многострочных блоках. Вы можете найти несоответствующие или пропущенные кавычки с помощью обратных трассировок Python:
>>>
>>> message = 'don't'
File "<stdin>", line 1
message = 'don't'
^
SyntaxError: invalid syntax
Здесь трассировка указывает на неверный код, где после закрывающей одинарной кавычки стоит + t '+
. Чтобы это исправить, вы можете сделать одно из двух изменений:
-
Escape одиночная кавычка с обратной косой чертой (
+ 'don ' t '+
) -
Окружить всю строку в двойных кавычках (
" не "
)
Другая распространенная ошибка — забыть закрыть строку. Как для строк с двойными, так и с одинарными кавычками ситуация и обратная трассировка одинаковы:
>>>
>>> message = "This is an unclosed string
File "<stdin>", line 1
message = "This is an unclosed string
^
SyntaxError: EOL while scanning string literal
На этот раз каретка в трассировке указывает прямо на код проблемы. Сообщение + SyntaxError +
, " EOL при сканировании строкового литерала "
, немного более конкретно и полезно при определении проблемы. Это означает, что интерпретатор Python дошел до конца строки (EOL) до закрытия открытой строки. Чтобы это исправить, закройте строку с кавычкой, которая совпадает с той, которую вы использовали для ее запуска. В этом случае это будет двойная кавычка (`+» + `).
Кавычки, отсутствующие в инструкциях внутри f-string, также могут привести к неверному синтаксису в Python:
1 # theofficefacts.py
2 ages = {
3 'pam': 24,
4 'jim': 24,
5 'michael': 43
6 }
7 print(f'Michael is {ages["michael]} years old.')
Здесь, ссылка на словарь + ages +
внутри напечатанной f-строки пропускает закрывающую двойную кавычку из ссылки на ключ. Итоговая трассировка выглядит следующим образом:
$ python theofficefacts.py
File "theofficefacts.py", line 7
print(f'Michael is {ages["michael]} years old.')
^
SyntaxError: f-string: unterminated string
Python идентифицирует проблему и сообщает, что она существует внутри f-строки. Сообщение " неопределенная строка "
также указывает на проблему. Каретка в этом случае указывает только на начало струны.
Это может быть не так полезно, как когда каретка указывает на проблемную область струны, но она сужает область поиска. Где-то внутри этой f-строки есть неопределенная строка. Вы просто должны узнать где. Чтобы решить эту проблему, убедитесь, что присутствуют все внутренние кавычки и скобки f-строки.
Ситуация в основном отсутствует в скобках и скобках. Например, если вы исключите закрывающую квадратную скобку из списка, Python обнаружит это и укажет на это. Однако есть несколько вариантов этого. Первый — оставить закрывающую скобку вне списка:
# missing.py
def foo():
return [1, 2, 3
print(foo())
Когда вы запустите этот код, вам скажут, что есть проблема с вызовом + print () +
:
$ python missing.py
File "missing.py", line 5
print(foo())
^
SyntaxError: invalid syntax
Здесь происходит то, что Python думает, что список содержит три элемента: + 1 +
, + 2 +
и +3 print (foo ()) +
. Python использует whitespace для логической группировки вещей, и потому что нет запятой или скобки, отделяющей + 3 +
от `+ print (foo ()) + `, Python объединяет их вместе как третий элемент списка.
Еще один вариант — добавить запятую после последнего элемента в списке, оставляя при этом закрывающую квадратную скобку:
# missing.py
def foo():
return [1, 2, 3,
print(foo())
Теперь вы получаете другую трассировку:
$ python missing.py
File "missing.py", line 6
^
SyntaxError: unexpected EOF while parsing
В предыдущем примере + 3 +
и + print (foo ()) +
были объединены в один элемент, но здесь вы видите запятую, разделяющую два. Теперь вызов + print (foo ()) +
добавляется в качестве четвертого элемента списка, и Python достигает конца файла без закрывающей скобки. В трассировке говорится, что Python дошел до конца файла (EOF), но ожидал чего-то другого.
В этом примере Python ожидал закрывающую скобку (+] +
), но повторяющаяся строка и каретка не очень помогают. Отсутствующие круглые скобки и скобки сложно определить Python. Иногда единственное, что вы можете сделать, это начать с каретки и двигаться назад, пока вы не сможете определить, чего не хватает или что нет.
Ошибочный синтаксис словаря
Вы видели ссылку: # syntaxerror-exception-and-traceback [ранее], чтобы вы могли получить + SyntaxError +
, если не указывать запятую в словарном элементе. Другая форма недопустимого синтаксиса в словарях Python — это использование знака равенства (+ = +
) для разделения ключей и значений вместо двоеточия:
>>>
>>> ages = {'pam'=24}
File "<stdin>", line 1
ages = {'pam'=24}
^
SyntaxError: invalid syntax
Еще раз, это сообщение об ошибке не очень полезно. Повторная линия и каретка, однако, очень полезны! Они указывают прямо на характер проблемы.
Этот тип проблемы распространен, если вы путаете синтаксис Python с синтаксисом других языков программирования. Вы также увидите это, если перепутаете определение словаря с вызовом + dict () +
. Чтобы это исправить, вы можете заменить знак равенства двоеточием. Вы также можете переключиться на использование + dict () +
:
>>>
>>> ages = dict(pam=24)
>>> ages
{'pam': 24}
Вы можете использовать + dict () +
для определения словаря, если этот синтаксис более полезен.
Использование неправильного отступа
Существует два подкласса + SyntaxError +
, которые конкретно занимаются проблемами отступов:
-
+ +
IndentationError -
+ +
TabError
В то время как другие языки программирования используют фигурные скобки для обозначения блоков кода, Python использует whitespace. Это означает, что Python ожидает, что пробелы в вашем коде будут вести себя предсказуемо. Он вызовет + IndentationError +
, если в блоке кода есть строка с неправильным количеством пробелов:
1 # indentation.py
2 def foo():
3 for i in range(10):
4 print(i)
5 print('done')
6
7 foo()
Это может быть сложно увидеть, но в строке 5 есть только два пробела с отступом. Он должен соответствовать выражению цикла + for +
, которое на 4 пробела больше. К счастью, Python может легко определить это и быстро расскажет вам, в чем проблема.
Здесь также есть некоторая двусмысленность. Является ли строка + print ('done') +
after циклом + for +
или inside блоком цикла + for +
? Когда вы запустите приведенный выше код, вы увидите следующую ошибку:
$ python indentation.py
File "indentation.py", line 5
print('done')
^
IndentationError: unindent does not match any outer indentation level
Хотя трассировка выглядит во многом как трассировка + SyntaxError +
, на самом деле это + IndentationError +
. Сообщение об ошибке также очень полезно. Он говорит вам, что уровень отступа строки не соответствует ни одному другому уровню отступа. Другими словами, + print ('done') +
это отступ с двумя пробелами, но Python не может найти любую другую строку кода, соответствующую этому уровню отступа. Вы можете быстро это исправить, убедившись, что код соответствует ожидаемому уровню отступа.
Другой тип + SyntaxError +
— это + TabError +
, который вы будете видеть всякий раз, когда есть строка, содержащая либо табуляцию, либо пробелы для отступа, в то время как остальная часть файла содержит другую. Это может скрыться, пока Python не покажет это вам!
Если размер вкладки равен ширине пробелов на каждом уровне отступа, то может показаться, что все строки находятся на одном уровне. Однако, если одна строка имеет отступ с использованием пробелов, а другая — с помощью табуляции, Python укажет на это как на проблему:
1 # indentation.py
2 def foo():
3 for i in range(10):
4 print(i)
5 print('done')
6
7 foo()
Здесь строка 5 имеет отступ вместо 4 пробелов. Этот блок кода может выглядеть идеально для вас, или он может выглядеть совершенно неправильно, в зависимости от настроек вашей системы.
Python, однако, сразу заметит проблему. Но прежде чем запускать код, чтобы увидеть, что Python скажет вам, что это неправильно, вам может быть полезно посмотреть пример того, как код выглядит при различных настройках ширины вкладки:
$ tabs 4 # Sets the shell tab width to 4 spaces
$ cat -n indentation.py
1 # indentation.py
2 def foo():
3 for i in range(10)
4 print(i)
5 print('done')
6
7 foo()
$ tabs 8 # Sets the shell tab width to 8 spaces (standard)
$ cat -n indentation.py
1 # indentation.py
2 def foo():
3 for i in range(10)
4 print(i)
5 print('done')
6
7 foo()
$ tabs 3 # Sets the shell tab width to 3 spaces
$ cat -n indentation.py
1 # indentation.py
2 def foo():
3 for i in range(10)
4 print(i)
5 print('done')
6
7 foo()
Обратите внимание на разницу в отображении между тремя примерами выше. Большая часть кода использует 4 пробела для каждого уровня отступа, но строка 5 использует одну вкладку во всех трех примерах. Ширина вкладки изменяется в зависимости от настройки tab width :
-
Если ширина вкладки равна 4 , то оператор
+ print +
будет выглядеть так, как будто он находится вне цикла+ for +
. Консоль выведет+ 'done' +
в конце цикла. -
Если ширина табуляции равна 8 , что является стандартным для многих систем, то оператор
+ print +
будет выглядеть так, как будто он находится внутри цикла+ for +
. Консоль будет печатать+ 'done' +
после каждого числа. -
Если ширина табуляции равна 3 , то оператор
+ print +
выглядит неуместно. В этом случае строка 5 не соответствует ни одному уровню отступа.
Когда вы запустите код, вы получите следующую ошибку и трассировку:
$ python indentation.py
File "indentation.py", line 5
print('done')
^
TabError: inconsistent use of tabs and spaces in indentation
Обратите внимание на + TabError +
вместо обычного + SyntaxError +
. Python указывает на проблемную строку и дает вам полезное сообщение об ошибке. Это ясно говорит о том, что в одном и том же файле для отступа используется смесь вкладок и пробелов.
Решение этой проблемы состоит в том, чтобы все строки в одном и том же файле кода Python использовали либо табуляции, либо пробелы, но не обе. Для приведенных выше блоков кода исправление будет состоять в том, чтобы удалить вкладку и заменить ее на 4 пробела, которые будут печатать + 'done' +
после завершения цикла + for +
.
Определение и вызов функций
Вы можете столкнуться с неверным синтаксисом в Python, когда вы определяете или вызываете функции. Например, вы увидите + SyntaxError +
, если будете использовать точку с запятой вместо двоеточия в конце определения функции:
>>>
>>> def fun();
File "<stdin>", line 1
def fun();
^
SyntaxError: invalid syntax
Трассировка здесь очень полезна, с помощью каретки, указывающей прямо на символ проблемы. Вы можете очистить этот неверный синтаксис в Python, отключив точку с запятой для двоеточия.
Кроме того, ключевые аргументы как в определениях функций, так и в вызовах функций должны быть в правильном порядке. Аргументы ключевых слов always идут после позиционных аргументов. Отказ от использования этого порядка приведет к + SyntaxError +
:
>>>
>>> def fun(a, b):
... print(a, b)
...
>>> fun(a=1, 2)
File "<stdin>", line 1
SyntaxError: positional argument follows keyword argument
Здесь, еще раз, сообщение об ошибке очень полезно, чтобы рассказать вам точно, что не так со строкой.
Изменение версий Python
Иногда код, который прекрасно работает в одной версии Python, ломается в более новой версии. Это связано с официальными изменениями в синтаксисе языка. Наиболее известным примером этого является оператор + print +
, который перешел от ключевого слова в Python 2 к встроенной функции в Python 3:
>>>
>>> # Valid Python 2 syntax that fails in Python 3
>>> print 'hello'
File "<stdin>", line 1
print 'hello'
^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print('hello')?
Это один из примеров, где появляется сообщение об ошибке, сопровождающее + SyntaxError +
! Он не только сообщает вам, что в вызове + print +
отсутствует скобка, но также предоставляет правильный код, который поможет вам исправить оператор.
Другая проблема, с которой вы можете столкнуться, — это когда вы читаете или изучаете синтаксис, который является допустимым синтаксисом в более новой версии Python, но недопустим в той версии, в которую вы пишете. Примером этого является синтаксис f-string, которого нет в версиях Python до 3.6:
>>>
>>> # Any version of python before 3.6 including 2.7
>>> w ='world'
>>> print(f'hello, {w}')
File "<stdin>", line 1
print(f'hello, {w}')
^
SyntaxError: invalid syntax
В версиях Python до 3.6 интерпретатор ничего не знает о синтаксисе f-строки и просто предоставляет общее сообщение «» неверный синтаксис «`. Проблема, в данном случае, в том, что код looks прекрасно работает, но он был запущен с более старой версией Python. В случае сомнений перепроверьте, какая версия Python у вас установлена!
Синтаксис Python продолжает развиваться, и в Python 3.8 появилось несколько интересных новых функций:
-
Walrus оператор (выражения присваивания)
-
F-string синтаксис для отладки
*https://docs.python.org/3.8/whatsnew/3.8.html#positional-only-parameters[Positional-only arguments]
Если вы хотите опробовать некоторые из этих новых функций, то вам нужно убедиться, что вы работаете в среде Python 3.8. В противном случае вы получите + SyntaxError +
.
Python 3.8 также предоставляет новый* + SyntaxWarning +
*. Вы увидите это предупреждение в ситуациях, когда синтаксис допустим, но все еще выглядит подозрительно. Примером этого может быть отсутствие запятой между двумя кортежами в списке. Это будет действительный синтаксис в версиях Python до 3.8, но код вызовет + TypeError +
, потому что кортеж не может быть вызван:
>>>
>>> [(1,2)(2,3)]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object is not callable
Этот + TypeError +
означает, что вы не можете вызывать кортеж, подобный функции, что, как думает интерпретатор Python, вы делаете.
В Python 3.8 этот код все еще вызывает + TypeError +
, но теперь вы также увидите + SyntaxWarning +
, который указывает, как вы можете решить проблему:
>>>
>>> [(1,2)(2,3)]
<stdin>:1: SyntaxWarning: 'tuple' object is not callable; perhaps you missed a comma?
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object is not callable
Полезное сообщение, сопровождающее новый + SyntaxWarning +
, даже дает подсказку (" возможно, вы пропустили запятую? "
), Чтобы указать вам правильное направление!
Заключение
В этом руководстве вы увидели, какую информацию предоставляет обратная связь + SyntaxError +
. Вы также видели много распространенных примеров неправильного синтаксиса в Python и каковы решения этих проблем. Это не только ускорит ваш рабочий процесс, но и сделает вас более полезным рецензентом кода!
Когда вы пишете код, попробуйте использовать IDE, который понимает синтаксис Python и предоставляет обратную связь. Если вы поместите многие из недопустимых примеров кода Python из этого руководства в хорошую IDE, то они должны выделить проблемные строки, прежде чем вы даже сможете выполнить свой код.
Получение + SyntaxError +
во время изучения Python может быть неприятным, но теперь вы знаете, как понимать сообщения трассировки и с какими формами недопустимого синтаксиса в Python вы можете столкнуться. В следующий раз, когда вы получите + SyntaxError +
, у вас будет больше возможностей быстро решить проблему!
The break statement terminates the current loop and resumes execution at the next statement. You can only use a break statement inside a loop or an if statement. If you use a break statement outside of a loop, then you will raise the error “SyntaxError: ‘break’ outside loop”.
Table of contents
- SyntaxError: ‘break’ outside loop
- What is SyntaxError?
- What is a Break Statement?
- Example: If Statement
- Solution
- Summary
SyntaxError: ‘break’ outside loop
What is SyntaxError?
Syntax refers to the arrangement of letters and symbols in code. A Syntax error means you have misplaced a symbol or a letter somewhere in the code. Let’s look at an example of a syntax error:
number = 23
print()number
print()number
^
SyntaxError: invalid syntax
The ^ indicates the precise source of the error. In this case, we have put the number variable outside of the parentheses for the print function, and the number needs to be inside the parentheses to print correctly.
print(number)
23
What is a Break Statement?
Loops in Python allow us to repeat blocks of code. In cases, Sometimes conditions arise where you want to exit the loop, skip an iteration, or ignore a condition. We can use loop control statements to change execution from the expected code sequence, and a break statement is a type of loop control statement.
A break statement in Python brings the control outside the loop when an external condition is triggered. We can put an if statement that determines if a character is an ‘s‘ or an ‘i‘. If the character matches either of the conditions the break statement will run. We can use either a for loop or a while loop. Let’s look at an example where we define a string then run a for loop over the string.
string = "the research scientist"
for letter in string:
print(letter)
if letter == 's' or letter == 'i':
break
print("Out of the for loop")
t
h
e
r
e
s
Out of the for loop
The for loop runs until the character is an ‘s‘ then the break statement halts the loop. Let’s look at the same string example with a while loop.
i = 0
while True:
print(string[i])
if string[i] =='s' or string[i] == 'i':
break
i += 1
print(Out of the while loop")
t
h
e
r
e
s
Out of the while loop
We get the same result using the while loop.
Example: If Statement
Let’s look at an example where we write a program that checks if a number is less than thirty. We can use an input() statement to get input from the user.
number = int(input("Enter an appropriate number "))
Next, we can use an if statement to check whether the number is less than thirty.
if number ≺ 30:
print('The number is less than 30')
else:
break
Suppose the number is less than thirty, the program prints a message to the console informing us. Otherwise, a program will run a break statement. Let’s run the program and see what happens:
Enter an appropriate number: 50
break
^
SyntaxError: 'break' outside loop
The program returns the SyntaxError: ‘break’ outside loop because the break statement is not for breaking anywhere in a program. You can only use a break statement within a loop.
Solution
To solve this problem, we need to replace the break statement with an exception that stops the program if the number exceeds thirty and provides an exception message. Let’s look at the revised code.
number = int(input("Enter an appropriate"))
if number ≺ 30:
print('The number is less than 30')
else:
raise Exception("The number is not less than 30")
We replaced the break statement with a raise Exception.
<meta charset="utf-8">Enter an appropriate number: 50
Exception Traceback (most recent call last)
2 print('The number is less than 30')
3 else:
----≻ 4 raise Exception('The number is greater than 30')
5
Exception: The number is greater than 30
If the number is greater than thirty the program will raise an exception, which will halt the program.
Summary
Congratulations on reading to the end of this tutorial! The error “SyntaxError: ‘break’ outside loop” occurs when you put a break statement outside of a loop. To solve this error, you can use alternatives to break statements. For example, you can raise an exception when a certain condition is met. You can also use a print() statement if a certain condition is met.
Go to the online courses page on Python to learn more about Python for data science and machine learning.
Have fun and happy researching!
Hello coders!! In this article, we will be learning about the “break outside loop” loop error in Python. We will see its cause with some examples and will ultimately learn how to resolve this error. Let us now understand it in detail.
What does ‘break’ mean in Python?
The ‘break’ statement is used to instruct Python to exit from a loop. It is commonly used to exit a loop abruptly when some external condition is triggered. The break statement can be used in any type of loop – while loop and for loop.
n = 10 while n > 0: print ('Value :', n) n = n -1 if n == 5: break print ('Exiting the loop')
output:
As we can see, when the value of the variable becomes 5, the condition for the break statement triggers and Python exits the loop abruptly.
SyntaxError: break outside loop in Python:
The purpose of a break statement is to terminate a loop abruptly by triggering a condition. So, the break statement can only be used inside a loop. It can also be used inside an if statement, but only if it is inside a loop. If one uses a break statement outside of a loop, then they will get the “SyntaxError: ‘break’ outside loop” error in their code.
n = 10 if n < 15: print('The number is less than 15') else: break
output:
We can see that the error SyntaxError: break outside loop occurs. This is because we have used the break statement without any parent loop.
Resolution for SyntaxError: break outside loop in Python:
The cause of the above error is that the break statement can’t be used anywhere in a program. It is used only to stop a loop from executing further.
We need to remove the break statements in order to solve the error. An exception can replace it. We use exceptions to stop a program and provide an error message.
n = 20 if n < 15: print('The number is less than 15') else: raise Exception("The number is not less than 15")
Output:
The code now returns an exception based on the given condition. When we use an exception, it stops the program from further execution( if triggered) and displays the error message.
If we want the program to continue further execution, we cam simply use a print statement.
n = 20 if n < 15: print('The number is less than 15') else: print("The number is not less than 15")
Output:
Here, due to the use of print statement, the program does not stop from execution.
Difference between break, exit and return:
BREAK | EXIT | RETURN |
Keyword | System Call | Instruction |
exit from a loop | exit from a program and return the control back to OS | return a value from a function |
Conclusion: Break Outside Loop Python
In this article, we discussed in detail the Python “break out of loop error.” We learned about using the break statement and saw the scene in which the said error can occur. So, to avoid it, we must remember to use the break statement within the loop only.
However, if you have any doubts or questions, do let me know in the comment section below. I will try to help you as soon as possible.
Happy Pythoning!