Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 循环函数以请求输入直到有效_Python_Python 2.7 - Fatal编程技术网

Python 循环函数以请求输入直到有效

Python 循环函数以请求输入直到有效,python,python-2.7,Python,Python 2.7,我有这个功能: def read_file(fname): f = open(fname, 'r') s = f.read() return s 它需要输入文件名来读取并保存到名为portfolio的变量中。然而,如果我指定了一个不存在的文件,我会得到一个IOError,并且我似乎无法通过try/except来处理它 有什么想法吗?您无法阻止它为您提供一个不存在的文件的IOError。如果可以,你怎么知道你必须做任何事情,比如要求另一个文件名 您

我有这个功能:

def read_file(fname):
        f = open(fname, 'r')
        s = f.read()
        return s
它需要输入文件名来读取并保存到名为portfolio的变量中。然而,如果我指定了一个不存在的文件,我会得到一个IOError,并且我似乎无法通过try/except来处理它

有什么想法吗?

您无法阻止它为您提供一个不存在的文件的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))
现在,当你运行这个程序时,它会一直请求一个文件名,直到你给它一个你可以读取的文件名。如果您给它一个不存在的文件,或者一个您没有读取权限的文件,或者该文件被锁定为独占访问,或者该文件存储在一个坏磁盘块上,或者任何其他可能导致错误的文件,它将再次询问您。

为什么不这样做

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

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

通过try-except处理它有什么不对吗?如果没有找到以前的文件,我就是无法让它要求另一个输入。我不知道我可以编辑标题。感谢@pokean并删除评论,更不用说标题,当它被修复xD时。遇到一点错误,我不想避免错误,只是想通过try/except来处理它,但我想不出任何东西。这就像一个魅力,但它修改了一点,以适应我的程序和它的炸弹。顺便问一下,“as e”是什么?它是python的另一个版本吗?@Davykarsson:e不是python的另一个版本;它是完全有效的2.7代码,事实上,除了IOError,e:之外的老式替代代码从2.6开始就被弃用了。如果你从某个来源学习,希望你以另一种方式学习,你需要找到一个新的来源。