如何检查是否缺少参数

时间:2015-03-02 02:11:20

标签: python

我写了这段代码:

def suma(num1,num2):

    if(isinstance(num1,int)) or (isinstance(num2,int)) :
       if num1<0 or num2<0:
            print("iavo")
       elif num1!=int(num1)or num2!=int(num2):
            print("iao")
       else:
            suma_a = num1+num2
            return suma_a
    else:
        print("ia")

我需要检查是否有num1num2。如果没有,程序应打印出缺少参数。

4 个答案:

答案 0 :(得分:2)

如果您没有指定默认值而用户没有提供两个参数,那么在您进入该功能之前,您将获得TypeError: suma() missing 1 required positional argument

def suma(num1=None,num2=None):
     # make sure user has entered two args and both are numbers
    if num1 is None or num2 is None:
        return "You Must choose two numbers"
    # rest of code

答案 1 :(得分:1)

如果您不发送这两个号码,该函数将抛出错误。没有办法在你的函数中省略一个参数。

如果你做了类似的事情:

def summ(a, b=None):
    return a+b

然后你可以省略b,但是这会再次抛出一个不受支持的操作数错误,因为你无法添加一个数字和None。

如果您在某个其他函数的范围内调用该函数,或者在类中,您可以检查是否存在所有数字,您可以将其包装在try except块中并尝试处理错误,如图所示可能最愚蠢的例子:

try: 
    summ(1)
except: 
    print("Missing arguments, you can't add numbers and None in Python!"\
          " Please send b.")

答案 2 :(得分:0)

This is what assertions are useful for.在您的声明中:

def suma(num1,num2):
    pass

如果某人仅使用一个参数调用suma,则该函数将抛出错误。

您可以通过声明参数的形式来添加额外的检查,如下所示:

def suma(num1,num2):
    assert (num1 is not None)
    assert (num2 is not None)

答案 3 :(得分:-1)

None值在逻辑比较时返回False。

检查缺少两个参数的简便方法可能是:

def suma(num1,num2):
    if not(num1 or num2):
        print('Missing both arguments')

这是你最初提出的问题。

但正如其他人指出的那样,即使你只错过一个参数,你的函数也会抛出异常。

因此,如果您想检查缺少任何参数,您可以执行以下操作:

def suma(num1,num2):
    if not(num1 and num2):
        print('Missing at least one argument')

如果您希望参数的值为0,则无法正常工作,因为在逻辑检查中它们将评估为False。在这种情况下,您可以使用更正式的方法:

not(num1 is None or num2 is None)
not(num1 is None and num2 is None)