if语句的函数返回none?

时间:2016-02-16 21:19:42

标签: python function return

我有一个我写的功能,它将两个数字分开。如果用户尝试0/0或x / 0,其中x是任意数字,我将添加错误消息。输入非零输入会产生正确的答案,但如果分母为0,则该函数将打印正确的语句,后跟NONE。

有任何解释吗?这是我的代码:

def divide():
    num1, num2 = prompt()
    if num1 == 0 and num2 == 0:
        print "Dividing zero by zero is undefined."
    elif num1 != 0 and num2 == 0:
        print "Cannot divide by zero."
    else:
        return float(num1) / num2

我看到人们在打印变量时有这个问题,并且使用return解决了他们的问题,但是在这里我打印一个字符串所以我不想使用return,对吗?

2 个答案:

答案 0 :(得分:0)

如果没有return语句,并且只返回程序的None分支,Python中的函数将返回else

考虑抛出异常而不是使用print。您可以在此处找到更多信息,包括除以零的示例:https://docs.python.org/2/tutorial/errors.html

答案 1 :(得分:0)

我只是想简要概述一下如何使用Python的内置异常来改进代码。

有几个内置异常会在执行错误操作时自动引发。所以当除以零时会出现ZeroDivisionError。您可以使用try-except-blocks来捕获任何这些异常。

我正在使用这些内置异常来告诉用户他的输入是否无效或他是否决定除以零。

为此,我重写了您的代码,如下所示:

def prompt():
    num1 = input('Please input a number: ')
    try:
        num1 = float(num1)
    except Exception as e:
        print('Your input is invalid. Starting at first input again.')
        return prompt()

    num2 = input('Please input another number: ')
    try:
        num2 = float(num2)
    except Exception as e:
        print('Your input is invalid. Starting at first input again.')
        return prompt()

    return num1, num2 


def divide():
    num1, num2 = prompt()
    result = None
    msg = None
    try:
        result = num1 / num2
    except ZeroDivisionError as e:
        msg = str(e)
        result = None
    return msg, result

msg, result = divide()

if result:
    print('The result of you calculation is: {}'.format(result))
else:
    print('The following error occured: {}'.format(msg))

您肯定可以进行一些进一步的改进或缩短我的代码。但是,我决定将此代码保持在这种状态,因为我不想在此时过多地混淆你。