为什么Python代码会生成ValueError?

时间:2015-12-15 14:22:51

标签: python

我正在编写代码,询问用户是否有任何正整数。如果用户输入的内容不是正整数,则它不能接受它并一次又一次地要求用户输入正整数,直到用户输入正整数。

其次,代码要求用户在0和1之间浮动,然后检查用户输入的是否是介于0和1之间的浮点数。如果它不在0和1之间,则必须再次询问,并再次询问用户输入了要求的内容。然后将其四舍五入到最近的2位小数位。

这是我的代码:

num1 = int(input("Enter a positive integer: "))
while num1 < 0 or not isinstance(num1 , int):
    print("Invalid!")
    num1 = int(input("Enter a positive integer: "))
num2 = float(input("Enter a decimal between 0 and 1: "))
while num2 < 0 or num2 > 1 or not isinstance(num2 , float):
    print("Invalid!")
    num2 = float(input("Enter a decimal between 0 and 1: "))

当我运行它并输入一个字符串时,它表示ValueError。

我是否必须使用错误处理?

2 个答案:

答案 0 :(得分:1)

intfloat构造函数抛出了ValueError。

while True:
    try:
        num1 = int(input("Enter a positive integer: "))
        if num1 >= 0:
            break
    except ValueError:
        pass
    print("Invalid!")

while True:
    try:
        num2 = float(input("Enter a decimal between 0 and 1: "))
        if num2 >= 0 and num2 <= 1:
            break
    except ValueError:
        pass
    print("Invalid!")

答案 1 :(得分:0)

如果您尝试按以下方式转换字符串:

>>> text = int("Blibla")

python解释器无法处理它。

Traceback (most recent call last):
File "<pyshell#3>", line 1, in <module>
text = int("Blibla")
ValueError: invalid literal for int() with base 10: 'Blibla'
>>> 

请尝试使用try / except来捕获任何ValueErrors:

num1 = 'error'
while not isinstance(num1,int) and num1 == 'error':
    try:
        num1 = int(input("Enter a positive integer: "))
        print("You input : {}".format(num1))
    except ValueError:
        print("Invalid!")