magicians.py
magicians = ['alice', 'david', 'carolina']
for magician in magicians:
print(magician)
Команда
print
в точке должна иметь отступ, но здесь его нет. Когда Python ожи-
дает увидеть блок с отступом, но не находит его, появляется сообщение с указанием
номера строки:
File "magicians.py", line 3
print(magician)
^
IndentationError: expected an indented block
Обычно для устранения подобных ошибок достаточно поставить отступ в строке
(или строках), следующей непосредственно после команды
for
.
Пропущенные отступы в других строках
Иногда цикл выполняется без ошибок, но не выдает ожидаемых результатов. Такое
часто происходит, когда вы пытаетесь выполнить несколько операций в цикле,
но забываете снабдить отступом некоторые из строк.
Например, вот что происходит, если вы забудете снабдить отступом вторую строку
в цикле:
magicians = ['alice', 'david', 'carolina']
for magician in magicians:
print(magician.title() + ", that was a great trick!")
print("I can't wait to see your next trick, " + magician.title() +
".\n")
Команда
print
в точке должна быть снабжена отступом, но, поскольку Python
находит хотя бы одну строку с отступом после команды
for
, сообщение об ошибке
не выдается. В результате первая команда
print
будет выполнена для каждого
Перебор всего списка 67
элемента в списке, потому что в ней есть отступ. Вторая команда
print
отступа
не имеет, поэтому она будет выполнена только один раз после завершения цикла.
Так как последним значением
magician
является строка
'carolina'
, второе сообще-
ние будет выведено только с этим именем:
Alice, that was a great trick!
David, that was a great trick!
Carolina, that was a great trick!
I can't wait to see your next trick, Carolina.
Это пример логической ошибки. Код имеет действительный синтаксис, но он не
приводит к желаемому результату, потому что проблема кроется в его логике.
Если некоторое действие должно повторяться для каждого элемента в списке, но
выполняется только один раз, проверьте, не нужно ли добавить отступы в строке
или нескольких строках кода.
Лишние отступы
Если вы случайно поставите отступ в строке, в которой он не нужен, Python со-
общит об этом:
hello_world.py
message = "Hello Python world!"
print(message)
Отступ команды
print
в точке не нужен, потому что эта строка не подчинена
предшествующей; Python сообщает об ошибке:
File "hello_world.py", line 2
print(message)
^
IndentationError: unexpected indent
Чтобы избежать непредвиденных ошибок с отступами, используйте их только там,
где для этого существуют конкретные причины. В тех программах, которые вы
пишете на этой стадии изучения Python, отступы нужны только в строках действий,
повторяемых для каждого элемента в цикле
for
.
Лишние отступы после цикла
Если вы случайно снабдите отступом код, который должен выполняться после за-
вершения цикла, то этот код будет выполнен для каждого элемента. Иногда Python
выводит сообщение об ошибке, но часто дело ограничивается простой логической
ошибкой.
Например, что произойдет, если случайно снабдить отступом строку с выводом
завершающего приветствия для группы фокусников?
magicians = ['alice', 'david', 'carolina']
for magician in magicians:
print(magician.title() + ", that was a great trick!")
68 Глава 4 • Работа со списками
print("I can't wait to see your next trick, " + magician.title() + ".\n")
print("Thank you everyone, that was a great magic show!")
Так как строка имеет отступ, сообщение будет продублировано для каждого
фокусника в списке :
Alice, that was a great trick!
I can't wait to see your next trick, Alice.
Thank you everyone, that was a great magic show!
David, that was a great trick!
I can't wait to see your next trick, David.
Thank you everyone, that was a great magic show!
Carolina, that was a great trick!
I can't wait to see your next trick, Carolina.
Thank you everyone, that was a great magic show!
Это еще один пример логической ошибки, наподобие описанной в разделе «Про-
пущенные отступы в других строках» на с. 66. Python не знает, что вы пытаетесь
сделать в своем коде, поэтому он просто выполняет весь код, не нарушающий правил
синтаксиса. Если действие, которое должно выполняться один раз, выполняется
многократно, проверьте, нет ли лишнего отступа в соответствующей строке кода.
Пропущенное двоеточие
Двоеточие в конце команды
for
сообщает Python, что следующая строка является
началом цикла.
magicians = ['alice', 'david', 'carolina']
for magician in magicians
print(magician)
Если вы случайно забудете поставить двоеточие, как в примере , произойдет
синтаксическая ошибка, так как полученная команда нарушает правила языка.
И хотя такие ошибки легко исправляются, найти их бывает достаточно трудно.
Вы не поверите, сколько времени тратят программисты на поиск подобных «одно-
символьных» ошибок. Поиск таких ошибок усложняется еще и тем, что человек
склонен видеть то, что он ожидает увидеть.
Достарыңызбен бөлісу: |