2011-05-11 85 views
2

我试图支持重复在用户输入文件名,然后输入两个整数。所以如果抛出异常,我希望用户再次被提示输入。蟒蛇尝试/例外帮助

我的问题是,如果输入了一个有效的文件,但输入了一个无效的整数,它将再次要求文件而不是整数。我该如何修复代码,以便再次询问整数。

以下是我有:

while True: 
    try: 
     f = raw_input("Enter name of file: ") 
     inFile = open(f) 
     # more code 
    except IOError: 
     print ("The file does not exist. Try Again.")   
    else:  
     try: 
      integer = int(raw_input("Enter an integer: ")) 
      integer2 = int(raw_input("Enter an integer: ")) 
      # more code 
     except (TypeError, ValueError): 
      print ("Not an integer. Try Again.") 

回答

9

尝试使用多个while循环:

while True: 
    fileName = raw_input("Enter name of file: ") 
    try: 
     # more code here to detect or open the file 
     break 
    except Exception: # can be IOError or something else 
     print ("error msg") 

while True: 
    try: 
     integer = int(raw_input("Enter an integer: ")) 
     integer2 = int(raw_input("Enter an integer: ")) 
     break 
    except (TypeError, ValueError): 
     print ("error msg") 

# more code 
+0

该死您34秒:( – 2011-05-11 09:20:08

+0

感谢,多重循环的工作!但是,当在第二循环中说,进入第一个整​​数是有效的,但第二个整数进入打我的标志是无效的,它会提示你重新输入这两个整数,是否可以只提示最后一个整数N + – michael 2011-05-11 09:31:02

+0

@michael,你可以将第二个循环分成两个循环,每个循环为'raw_input' – 2011-05-11 09:37:16

0
while True: 
    try: 
     a = int(raw_input('a: ')) 
     b = int(raw_input('b: ')) 
     break 
    except ValueError: 
     print "Numbers idiot" 
#more code here 

此代码将跳转到不同的块a或b,并与更多的进行如果数字有效,请输入代码

0
>>> def ask(question, func, exceptions): 
...  while True: 
...   try: 
...    return func(raw_input(question)) 
...   except exceptions, error: 
...    pass 
... 
>>> x = ask("integer?", int, ValueError) 
integer?o 
integer?l 
integer?42 
>>> x 
42 
0

,就答案扩大上述使用多个while循环和关于处理额外的数据验证,而不必遍历已经核实数据的相关问题,下面看起来这些混沌有关,但它给你的颗粒状检查你寻找实现:

while True: 
    fileName = raw_input("Enter name of file: ") 
    try: 
     # more code here to detect or open the file 
     break 
    except Exception: 
     print ("The file does not exist. Try Again.") 

while True: 
    try: 
     integer = int(raw_input("Enter an integer: ")) 
     break 
    except (TypeError, ValueError): 
     print ("Not an integer. Try Again.") 

while True: 
    try: 
     integer2 = int(raw_input("Enter an integer: ")) 
     break 
    except(TypeError, ValueError): 
     print ("Not an integer. Try Again.")