我是新手,学习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
答案 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")