如果数据目录为空,则退出Python程序

时间:2016-11-22 14:16:44

标签: python try-except

更新:我想我可能刚刚意识到我需要弄清楚:下面,这是用except子句指定的正确错误类型(显然是新的)

从指定的根目录开始,我的程序遍历子目录,然后遍历这些目录中的文件,识别有效(.csv)数据文件,然后聚合并执行数据计算。

如果根目录恰好是空的,有人可以建议一种干净/优雅的方式,只需在开始时退出程序而无需进一步处理吗?

我试图调整我在这里找到的建议,但它没有像我预期的那样工作: Exit gracefully if file doesn't exist

该人的代码是:

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

我上面试了一下,它适用于上面的特定情况。然而,当我试图按照以下方式进行调整时,它已经打破了#39;我得到一个"索引超出范围错误"而是下降到除了代码。

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

(而且/相反,我非常欢迎对整个任务的其他方法提出建议)

5 个答案:

答案 0 :(得分:1)

空列表没有元素,因此您应该抓住IndexError而不是IOError

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

答案 1 :(得分:1)

你为什么要使用例外?

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

item = dir[0]

答案 2 :(得分:1)

要立即退出程序,您应使用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)检查列表的长度。

您可能还希望避免在Python中使用dir作为变量名称,因为它会影响内置函数dir()

答案 3 :(得分:0)

#!/usr/bin/env python

import os 
path = 'path-to-your-dir'
if os.listdir(path) == []: 
    exit(0)
else: 
    print "Your other code goes here."

答案 4 :(得分:0)

这些是退出命令及其definitions

exit(0)表示没有任何错误/问题的干净退出

exit(1)表示存在一些问题/错误/问题,这就是程序退出的原因。

子进程的

os._exit()

幕后的

quit() SystemExit异常。

sys.exit()杀死翻译