Выйдите из программы Python, если каталог данных пуст

ОБНОВЛЕНИЕ: я думаю, что, возможно, только что понял, что мне нужно, чтобы выяснить: ниже, который является правильным типом ошибки для указания с помощью исключения (очевидно, новое для этого)

Начиная с указанного корневого каталога, моя программа перебирает подкаталоги, затем файлы в них, идентифицируя действительные (.csv) файлы данных, а затем агрегируя и выполняя вычисления с данными.

В случаях, когда корневой каталог оказывается пустым, может ли кто-нибудь предложить чистый/изящный способ просто выйти из программы при запуске без дальнейшей обработки?

Я попытался адаптировать предложение, которое нашел здесь, но оно не сработало, как я ожидал: Выйти корректно, если файл не существует

Код этого человека был:

def main():
    try:
        file = open('file.txt', 'r')
    except IOError:
        print('There was an error opening the file!')
        return

Я попробовал вышеизложенное, и это работает для конкретного случая выше. Однако, когда я попытался адаптировать его следующим образом, он «сломался», и я получил «Ошибка индекса вне диапазона», вместо этого перейдя к коду исключения.

dir = os.listdir(masterDirPath)
def main():
    try:
        item = dir[0]
    except IOError:
        print('The data area is empty.')
        return

(Кроме того/вместо этого я очень приветствую предложения о совершенно другом подходе к задаче в целом)


person Margarita    schedule 22.11.2016    source источник
comment
Вы должны проверить длину списка каталогов или добавить исключение для ошибки индекса.   -  person OneCricketeer    schedule 22.11.2016
comment
Возможный дубликат Я хочу обработать исключение 'вывести индекс из списка диапазона.'   -  person OneCricketeer    schedule 22.11.2016


Ответы (4)


Чтобы выйти из вашей программы немедленно, вы должны использовать либо exit(), либо quit(). Вместо того, чтобы выдавать ошибку, вы можете использовать тот факт, что многие объекты в Python правдивы; пустой список — False, а список с одним или несколькими элементами — True.

import os
dir_contents = os.listdir('.')
if dir_contents:
    do_stuff
else:
    print('Directory was empty. Exiting')
    exit()

Если вы предпочитаете явность неявности, вы также можете проверить длину своего списка, используя len(dir_contents), прежде чем индексировать его.

Вы также можете избегать использования dir в Python в качестве имени переменной, так как оно будет затенять встроенную функцию dir().

person RegularlyScheduledProgramming    schedule 22.11.2016
comment
Спасибо, особенно за уровень контекста/детализации. Очень полезно. (Мне нравится правдивое описание :-) - person Margarita; 22.11.2016

Пустой список не имеет элементов, поэтому вы должны поймать IndexError вместо IOError.

def main():
    try:
        item = dir[0]
    except IndexError:
        print('The data area is empty.')
        return
person DeepSpace    schedule 22.11.2016

Почему вы используете исключение?

if not dir:
    print('The data area is empty')
    exit(0)

item = dir[0]
person Sven    schedule 22.11.2016

Это команды выхода и их definitions

exit(0) означает чистый выход без ошибок/проблем

exit(1) означает, что возникла какая-то проблема/ошибка/проблема, и поэтому программа закрывается.

os._exit() для дочерних процессов

quit() исключение SystemExit за кулисами.

sys.exit() убить переводчика

person Januka samaranyake    schedule 22.11.2016