3

我试图捕捉一个输入错误——唯一有效的输入是一个整数。

如果输入了非整数,我希望它返回到 func 的开头并重试:

def setItorator():
 try:
  iterationCap = int(raw_input("Please enter the number of nibbles you want to make: "))
  print "You will make", iterationCap, "nibbles per file"
 except ValueError:
  print "You did not enter a valid integer, please try again"
  setItorator()
 return iterationCap 

if __name__ == "__main__":
 iterationCap = setItorator()

如果第一个输入有效,则此方法有效,如果输入无效,则返回到 func 的开头,但它似乎没有将正确的有效传递回主 func。我检查了子函数,它看到了正确的变量和正确的类型(int),它确实出现了,但我得到一个错误:

UnboundLocalError: local variable 'iterationCap' referenced before assignment  

如果第一个输入有效(例如“10”),仅当第一个输入无效(例如“a”后跟“10”)时,我不会看到此错误

4

2 回答 2

3

尝试这样的事情。

while True:
   try:
    i = int(raw_input("Enter value "))
    break
   except ValueError:
    print "Bad input"

print "Value is ",i

您当前的方法将为每个错误递归调用您的函数,这不是一个好习惯。该错误是因为在您的异常处理程序块中,您没有定义iterationCap.

于 2012-05-16T08:30:10.273 回答
2

你需要return setItorator()在except语句中。现在,您只是调用函数并忽略输出。

于 2012-05-16T08:29:31.247 回答