如果我的函数有以下代码:
try:
return map(float, result)
except ValueError, e:
print "error", e
在方法的返回部分使用try/except是正确的吗?是否有更明智的解决方法?
如果我的函数有以下代码:
try:
return map(float, result)
except ValueError, e:
print "error", e
在方法的返回部分使用try/except是正确的吗?是否有更明智的解决方法?
我花了一段时间才学会,在Python中,函数抛出异常是很自然的。我曾经在问题发生的地方处理这些问题,但这样做耗费了我太多精力。
如果您只是让异常传递上来,代码可以变得更简单、更易于维护。这样可以在适当的级别检测问题。
一个选项是:
try:
return map(float, result)
except ValueError, e:
print "error", e
raise
但这会在一些深层函数中引入打印。相同的功能可以通过raise
实现,让上一级代码执行适当的操作。
在这种情况下,我更喜欢的解决方案是:
return map(float, result)
不需要绕来绕去,做该做的事情,如果有问题就抛出异常。
return
语句的代码块用try
/except
子句包围起来,那么当实际出现异常时,您应该考虑返回什么:None
。如果这正是您想要的,我建议明确添加一个return None
。except ValueError, e:
print "error", e
return None
except
块中注明这一事实。except ValueError, e:
print "error", e
raise
这取决于函数的使用方式,期望出现什么异常情况以及您的整体设计,您需要选择哪个选项。
pass
。这会引起问题,因为代码期望try
块要完成某些事情,而这件事并没有发生。
return
周围使用try
。这里没有足够的上下文来建议更好的方法。 - Martijn PietersNone
。提供更广泛的上下文将有助于提出更明智的建议。 - Koremmap()
函数出现错误,您希望在此函数中发生什么?除了打印错误之外。您想让函数返回None
吗?返回另一个值?在打印错误后允许异常向上传播到调用堆栈? - Andrew Gorcester