如何在此代码中返回打印到控制台?

时间:2016-02-07 02:25:03

标签: python

def distance_from_zero(distance):
    if type(distance) == int or type(distance) == float:
        return abs(distance)
        print(distance)
    else:
        return "Nope"
        print distance_from_zero(distance)

distance_from_zero(18)

5 个答案:

答案 0 :(得分:2)

你应该在回来之前打印。返回后,无法访问print语句。

取代:

return abs(distance)
print(distance)

with:

print(distance)
return abs(distance)

而且:

return "Nope"
print distance_from_zero(distance)

with:

print distance_from_zero(distance)
return "Nope"

答案 1 :(得分:0)

返回后的代码永远不会被执行。

您必须恢复订单。

类似的东西:

{{1}}

答案 2 :(得分:0)

这是将打印语句放在正确位置的原始代码。请注意仍然显示的无限递归错误。

def distance_from_zero(distance):
    if type(distance) == int or type(distance) == float:
        print(distance)
        return abs(distance)
    else:
        # This print forces infinite recursion because of distance
        # print distance_from_zero(distance)
        return "Nope"

这是一种测试方法

def distance_from_zero(distance):
    if type(distance) == int or type(distance) == float:
        print(distance)
        return abs(distance)
    else:
        try:
            distance = float(distance)
            print(distance)
            return abs(distance)
        except:
            print ("invalid distance specified", distance)
            return "Nope"

当然,可以删除初始if,因为float(int)float(float)仍会返回正常的浮点数。

def distance_from_zero(distance):
    try:
        distance = float(distance)
        print(distance)
        return abs(distance)
    except:
        print ("invalid distance specified", distance)
        return "Nope"

答案 3 :(得分:0)

首先,为什么在调用abs()之前需要检查参数的类型?打电话吧。 abs()最了解它可以使用的操作数类型。如果它看到它无法处理TypeError异常将被引发并且调用者可以处理它。

如果您确实想要处理函数中的错误,请使用try/except块,而不是尝试猜测abs()支持的类型,例如支持复数; abs(complex(1, 2))完全有效:

try:
    distance = abs(distance)
except TypeError as e:
    print('{!r} is not a valid distance'.format(distance))
    return None    # or some other error
else:
    print(distance)
    return distance

最后,如果您确实希望仅限制intfloat类型的支持,最好使用isinstance()而不是type(),因为它支持继承:< / p>

if isinstance(distance, (int, float)):
    # it's a float or an int
    distance = abs(distance)

还有其他几点需要注意:

  • 在函数中调用print()之前调用returnreturn 终止函数并将执行返回给调用代码,因此return之后的任何语句都不会被执行。
  • 您似乎想在 abs()之后打印距离的值,所以 您需要将结果存储在变量中(或执行两次计算):

    distance = abs(distance)
    print(distance)
    return distance
    

答案 4 :(得分:0)

我认为Python在你return之后停止阅读定义,所以你应该交换printreturn命令。