为什么Python代码生成ValueError?

为什么Python代码生成ValueError?,python,Python,我正在编写代码,要求用户输入任何正整数。如果用户输入的不是正整数,则在用户输入正整数之前,用户不得接受并一再要求用户输入正整数 其次,代码要求用户输入介于0和1之间的浮点值,然后检查用户输入的是否是介于0和1之间的浮点值。如果不在0和1之间,则必须再次询问,直到用户输入所需内容。然后将其四舍五入至小数点后2位 这是我的密码: num1 = int(input("Enter a positive integer: ")) while num1 < 0 or not isinstance(nu

我正在编写代码,要求用户输入任何正整数。如果用户输入的不是正整数,则在用户输入正整数之前,用户不得接受并一再要求用户输入正整数

其次,代码要求用户输入介于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: "))
num1=int(输入(“输入一个正整数:”)
当num1<0或不存在时(num1,int):
打印(“无效!”)
num1=int(输入(“输入一个正整数:”)
num2=浮点(输入(“输入介于0和1之间的十进制:”)
当num2<0或num2>1或不存在时(num2,浮动):
打印(“无效!”)
num2=浮点(输入(“输入介于0和1之间的十进制:”)
当我运行它并输入一个字符串时,它显示ValueError


我必须使用错误处理吗?

ValueError由
int
float
构造函数抛出

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!")
为True时:
尝试:
num1=int(输入(“输入一个正整数:”)
如果num1>=0:
打破
除值错误外:
通过
打印(“无效!”)
尽管如此:
尝试:
num2=浮点(输入(“输入介于0和1之间的十进制:”)

如果num2>=0且num2尝试按以下方式强制转换字符串:

>>> 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'
>>> 

我认为,有一个问题是,如果用户向
num1
输入一个浮点数,它应该重新输入。@Hooting
int('1.1')
抛出ValueError,因此会再次提示。这是我所理解的预期行为。@Andreifort非常欢迎您!如果您对问题的答案感到满意,您可以单击左侧的灰色勾号接受该答案。这样问题就结束了。(回答者得到奖励)@AndreiFortess
pass
statement实际上什么都不做。但是在python中不能有空块,所以可以
传递
使其非空。但是为什么不能在Exception ValueError:下打印(“无效!”?)@黑格尔·黑格杜斯
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!")