可以打印功能捕获无返回值而不打印它?

时间:2016-12-07 19:59:10

标签: python python-2.7 python-3.x types

我是新手,学习Python。在下面的代码中,避免打印的最佳方法是什么?我评论说出错了。

我知道为什么没有印刷。我希望函数有2种返回类型,但显然根据S.Lott对Why should functions always return the same type?的响应,这对于代码的可维护性来说是不好的做法。此外,unutbu的答案在同一篇文章中,当你在函数中调用函数时会弹出错误,期望某种类型 - fun1(fun2(arg))。我不想像S.Lott建议的那样引发运行时错误。有没有一种方法可以捕获无值而不打印它?

def smaller_root(a,b,c):
    """
    akes an input the numbers a,b and c returns the smaller solution to this 
    equation if one exists. If the equation has no real solution, print 
    the message, "Error: No Real Solution " and simply return.
    """
    discriminant = b**2-4*a*c

    if discriminant == 0:
        return  -b/(2*a)
    elif discriminant > 0:
        return (-b-discriminant**0.5)/(2*a) #just need smaller solution
    else:
        print("Error: No Real Solution")
        #raise Exception("Error: No Real Solution")
        #no return statement as there is no use for it. 
        #Python will implicitly return None

1 个答案:

答案 0 :(得分:1)

你的功能一个,只有一个。因此,在您的情况下,它应该根据一些变量找到smaller_root

函数的返回值应该是root。在您的情况下,它可能会返回None,这表示解决方案没有根。

但是,你试图让函数做多个的东西,也就是说,你试图让函数返回一个值(根)并打印出一条消息,如果没有root找到了。

您应该只为您的功能选择一种功能:它将 EITHER 打印出结果(即打印根或消息)返回结果。

除了功能之外的所有其他逻辑都超出了功能的范围,例如:

def smaller_root(a,b,c):
    """
    akes an input the numbers a,b and c returns the smaller solution to this 
    equation if one exists. If the equation has no real solution, print 
    the message, "Error: No Real Solution " and simply return.
    """
    discriminant = b**2-4*a*c

    if discriminant == 0:
        return  -b/(2*a)
    elif discriminant > 0:
        return (-b-discriminant**0.5)/(2*a) #just need smaller solution
    else:
        return None

result = smaller_root(some_a, some_b, some_c)
if (result is None):
    print("Error: No Real Solution")