Может кто-то объяснить причину, почему else:pass
, показанный ниже, необходим для остатка кода (окончательного сообщения print 'processing...
)? Обратите внимание, что print
в else
был помещен туда, чтобы я мог сказать, что исполнение действительно проходило по этому пути.Почему это еще: передать для продолжения обработку?
Кажется, что это должно происходить всякий раз, когда continue
не выполняется, поскольку код в else
ничего не делает. Однако, если я покину else
, ничего больше в цикле for
не будет выполняться, когда условие False - если в каталоге есть файлы с расширением do, что для меня не имеет смысла. Документы говорят, что continue
«продолжается с последующим циклом ближайшего замкнутого цикла», штраф, но если он не выполняется, не следует ли переходить к следующему оператору?
import os
source_dir = r'C:\Downloads'
ext = '.mp3'
for dirName, subdirList, fileList in os.walk(source_dir):
if not any(os.path.splitext(fileName)[1].lower() == ext for fileName in fileList):
print ' skipping "{}"'.format(dirName)
continue
else: # why is this clause needed to continue this iteration of a loop?
print 'contains "{}"'.format(dirName)
pass
print 'processing "{}" which has "{}" files'.format(dirName, ext)
Mystery решаемые
Казалось бы, странное поведение было связано с проблемой вдавливания, которая не видна в выше, ни нормально в моем текстовом редакторе кода. Оказалось, что последнее высказывание print
было отступом на 3 пробела, а затем на вкладке, которая, по-видимому, выравнивается с else
, но на самом деле она либо следует за pass
в else
, если она есть, либо следует за continue
в первой части if
. Очевидно, меня много смущает.
Вот скриншот кода в текстовом редакторе с включенной опцией «show space/tabs». Красные точки представляют собой пространство, а красный >>
представляет собой символ табуляции:
Я уверен, что это необязательно. Я изменил '.mp3' на' .txt' и искал другой путь, но в противном случае я запустил код. Он работал как ожидалось в обоих случаях ... – mgilson
Каков код, который не работает? (Кроме того, вы проверяли, что отступы согласуются, особенно при использовании пробелов/вкладок? Кажется, что это простое ограничение для такого рода ошибок, так как 'else' также можно привязать к' for'.) – delnan
Я запустил ваш код и они ведут себя так, как ожидалось, в обоих случаях. –