如果参数不是数字,如何重新启动函数?

时间:2019-05-18 20:21:54

标签: python

我正在编写一个GPA计算器,并且我想确保输入的类数是一个数值。如果没有,如何使下面的函数返回?

def get_num_classes(n):
    num_classes = n
    if n.isnumeric():
        return int(num_classes)
    else:
        #???

在主文件中,该函数称为: num_classes = grade_fcns.get_num_classes(input("Number of classes this semester: "))

2 个答案:

答案 0 :(得分:1)

使用while循环将输入的验证委托给int

def get_num_classes():
    while True:
        try:
            return int(input("Number of classes this semester: "))
        except ValueError:
            print('Try again')

print(get_num_classes())

示例:

Number of classes this semester: s
Try again
Number of classes this semester: sd
Try again
Number of classes this semester: 3
3

该解决方案不倾向于无限递归(以及不可避免的堆栈溢出)。

答案 1 :(得分:0)

考虑到None没有道理(我的意思是,这没有“不是有效的东西”的其他含义),我会尝试这样做:

def get_num_classes(n):
    num_classes = n
    if n.isnumeric():
        return int(num_classes)
    return None #There's no need of else here, once we're talking about return statements

,然后从while(True)语句中调用它:

while (True):
    answer = get_num_classes(input("Number of classes this semester: "))
    if answer is not None:
        #Do something else
        break
    else:
        print("Try again...\n")

这种方法不是递归的,但是一旦while(True)永远挂在那里,您应该当心。您甚至可以使用try / except方法,例如,可以在其中检查其他条件:它是整数吗?大于0吗?是介于xy之间吗?并且,如果不满足这些条件,请引发一个异常,例如AttributeError,然后将其捕获到主代码中。

希望有帮助