Python While循环for except ValueError,未按预期工作 def get_number(): x=真 当x==True时: 尝试: x=int(输入(“输入一个数字:”) 如果x

Python While循环for except ValueError,未按预期工作 def get_number(): x=真 当x==True时: 尝试: x=int(输入(“输入一个数字:”) 如果x,python,python-3.x,Python,Python 3.x,如果多次键入-1,然后键入ValueError,例如“x”,然后键入正确的数字,如5,则需要多次尝试,直到代码将其输入正确。首先,如果用户输入1,while循环将继续,因为在python中1==True是一条True语句 如果出现错误,请再次调用get_number,这是不必要的,因为您已经处于while循环中-您应该决定在此处使用递归或循环 在我的代码中,我将用户输入存储在另一个变量中,以消除1==True的问题 def get_number(): x=真 当x==True时: 尝试: i=i

如果多次键入-1,然后键入ValueError,例如“x”,然后键入正确的数字,如5,则需要多次尝试,直到代码将其输入正确。

首先,如果用户输入
1
,while循环将继续,因为在python中
1==True
是一条True语句

如果出现错误,请再次调用
get_number
,这是不必要的,因为您已经处于while循环中-您应该决定在此处使用递归或循环

在我的代码中,我将用户输入存储在另一个变量中,以消除1==True的问题

def get_number():
x=真
当x==True时:
尝试:
i=int(输入(“输入编号”))

如果i您不需要声明第一个x。相反,你可以这样做。并删除该函数的递归调用

def get_number():
    x = True
    while x == True:
        try:
            x = int(input("Enter a number: "))
            if x < 1 :
                raise ValueError('Invalid input, please enter a number above 0: ')   # go to except block
        except ValueError:
            print ("Invalid input, please enter an integer: ")
            get_number()

get_number()
def get_number():
尽管如此:
尝试:
x=int(输入(“输入一个数字:”)
如果x<1:
raise VALUE ERROR('输入无效,请输入0以上的数字:')#转到除块
除值错误外:
打印(“输入无效,请输入整数:”)
获取_编号()

将“否”输入到其他变量,然后输入x,因为您已经在使用它,也不要再调用get_号码。对不起,我更喜欢视觉学习,你能改为键入代码吗?你能解释一下你的程序有什么问题吗?把
x==True
改为
y==True
和所有的密码,如果你输入一个小于0的数字,比如-1,或者输入一个整数以外的字符,比如a、B或C等,也可以删除
get_number
@KaziSohan,多次,然后输入一个正确的数字,如5,您需要多次键入它,直到程序停止。代码还有更多内容(因此,我必须声明第一个x,但我将其更改为y,因为我意识到我使用了x作为用户输入,但其余的都是正确的)。
def get_number():
    while True:
        try:
            x = int(input("Enter a number: "))
            if x < 1 :
                raise ValueError('Invalid input, please enter a number above 0: ')   # go to except block
        except ValueError:
            print ("Invalid input, please enter an integer: ")

get_number()