循环函数要求输入直到有效

时间:2014-10-20 23:46:38

标签: python python-2.7

我有这个功能:

def read_file(fname):
        f = open(fname, 'r')
        s = f.read()
        return s

应该输入(要读取的文件的名称)并将其保存到名为portfolio的变量中。但是,如果我指定一个不存在的文件,我会得到一个IOError,而我似乎无法通过try / except来弄清楚如何处理它。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

你不能停止它为你提供IOError不存在的文件。如果可以,你怎么知道你必须做任何事情,比如要求另一个文件名?

可以做的是以任何你想要的方式处理这个错误,比如要求另一个文件名。

例如:

while True:
    fname = raw_input('Gimme a filename')
    try:
        contents = read_file(fname)
        break
    except IOError as e:
        print('Sorry, {} gives me an error: {}'.format(fname, e))

现在,当你运行它时,它会继续询问文件名,直到你给它一个你可以阅读的文件名。如果你给它一个不存在的文件(或者你没有读取权限的文件,或者为了独占访问而被锁定的文件,或者存储在坏磁盘块上的文件,或者任何其他可能导致错误的文件),它会再次问你。

答案 1 :(得分:1)

为什么不这样做?

success = 0
while (success == 0):
    try:
        #get your input
        read_file(fname)
        success = 1
    except(IOError):
        success = 0       #totally unnecessary I guess, but whatever

自从我进行了真正的开发以来已经有一段时间了,所以这可能不是try / except在Python中实际工作的方式,但你明白了。