Как вы код, как представляется, по-видимому, на том же уровне отступа, каждый из ваших if
/else
блоков будет выполняться один за другим, поэтому печатание «неудачная попытка!» для каждого пути к файлу, который не существует. С учетом вашего комментария 12 марта вы можете использовать цикл for
, за которым следует блок if
/else
, чтобы убедиться, что «Failed Tryempt!» печатается только после того, как все файлы были проверены на наличие. Смотрите ниже код (Примечание: Поскольку у меня нет Windows 7 под рукой, я не проверял это, но он должен работать):
import os
FILES = ('D:/autorun.exe', 'D:/Install.exe', 'D:/AutoRun.exe', 'D:/install.exe')
FILE_FOUND = False
for file in FILES:
if os.path.exists(file):
FILE_FOUND = file
break
if FILE_FOUND:
os.startfile(FILE_FOUND)
else:
print("Failed Attempt!")
Так разбить его шаг за шагом:
Импортируйте модуль os
, который вы, очевидно, уже сделали это в другом месте.
Пути файлов для каждого проверяемого файла должны храниться в виде кортежа в FILES
. Кортеж используется, потому что он «неизменный», и поэтому мы знаем, что он будет храниться точно так, как показано выше. Это также удобно, так как это будет означать, что цикл for проверяет каждый файл в порядке слева направо.
FILE_FOUND
первоначально присваивается как False
. Это будет использовано позже для 2 вещей:
- Чтобы сохранить строку файла пути файла от
FILES
, если она существует.
- Используется для определения того, должен ли выполняться
os.startfile()
.
Следующая петля for
. Каждая строка пути файла в корте для FILES
будет доступна для проверки с помощью отступающего кода, следующего за for file in FILES:
. Переменная file
представляет собой строку, представляющую текущий путь к файлу от FILES
, и она является локальной для кода, связанного с циклом for
. Затем цикл проверяет, существует ли файл в указанной строке пути файла в file
. Если файл существует, то FILE_FOUND
присваивается строка, хранящаяся в file
. Затем оператор break
выходит из цикла for
без учета каких-либо элементов в FILES
, которые не были проверены. В противном случае цикл for
будет продолжать работать до тех пор, пока не закончится количество элементов для проверки в FILES
.
Наконец, блок кода if
/else
будет работать только после того, как цикл for
имеет либо нашел файл, который существует, или закончил работать все пункты в FILES
.Если FILE_FOUND
вычисляется как True
(в силе не будучи None
, 0
, False
, или в соответствии с python docs), os.startfile(FILE_FOUND)
будет выполняться, когда мы знаем, что путь_к_файл строка из существующего файла была предварительно сохранены в FILE_FOUND
петле for
, Если ни одна из строк файловой трассы не найдена в цикле for
, переменная FILE_FOUND
по-прежнему будет False
, поэтому печать «Failed Attempt!».
Я действительно не знаю, что делать! –
добавил код в вопрос! –
Не могли бы вы показать мне пример того, как это используется? –