繁体   English   中英

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

[英]How can I restart a function if the argument isn't numeric?

我正在写一个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: "))

使用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

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

考虑到“ 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 ,然后将其捕获到主代码中。

希望能帮助到你

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM