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开始就被弃用了。如果你从某个来源学习,希望你以另一种方式学习,你需要找到一个新的来源。