重复避免ValueError

时间:2019-03-20 06:35:39

标签: python python-3.x

考虑以下代码:

def meh():
  try:
    n=int(input("\nEnter any number : "))
  except ValueError:
    n=int(input("\nERROR!! Kindly enter a number only! : "))
我试图避免这样的输出:

def meh():
  try:
    n=int(input("\nEnter any number : "))
  except ValueError:
    n=int(input("\nERROR!! Kindly enter a number only! : "))

基本上,我的目标是仅实现一个整数,而不管我输入字符串值多少次。 如果你们让我知道这样做的方式,我将非常感激!

2 个答案:

答案 0 :(得分:4)

尝试一下:

def meh():
  try:
    n=int(input("\nEnter any number : "))
  except ValueError:
    print('ERROR!! Kindly enter a number only!')
    meh()

以前,当函数第二次获得非整数类型的字符串时,它将再次抛出相同的ValueError,因为try部分中没有其他except块。因此,只需在except块中再次调用该函数,然后再打印伪错误即可。

输出

>>> meh()

Enter any number : d
ERROR!! Kindly enter a number only!

Enter any number :
ERROR!! Kindly enter a number only!

Enter any number : a
ERROR!! Kindly enter a number only!

Enter any number : g
ERROR!! Kindly enter a number only!

Enter any number : dsfdsg
ERROR!! Kindly enter a number only!

Enter any number : 4243

答案 1 :(得分:1)

我同意其他答案,但是将代码包含在try / except中并不是一个好主意。

def meh():
    n = input("Enter any number:")
    if not n.isdigit():
        raise ValueError('ERROR!! Kindly enter a number only!')
    return int(n)

然后您可以这样称呼

if __name__ == "__main__":
    while True:
        try:
            j=meh()
            print ('You entered ', j)
            break
        except ValueError as e:
            print (e)
            continue

您将获得如下输出:

[test@localhost google_fin]$ python ~/test.py
Enter any number:k
ERROR!! Kindly enter a number only!
Enter any number:k
ERROR!! Kindly enter a number only!
Enter any number:k
ERROR!! Kindly enter a number only!
Enter any number:k
ERROR!! Kindly enter a number only!
Enter any number:2
You entered  2