Python 在try和except语句中使用return语句是否正确?
如果我在函数末尾有这样的代码:Python 在try和except语句中使用return语句是否正确?,python,methods,exception-handling,return,try-except,Python,Methods,Exception Handling,Return,Try Except,如果我在函数末尾有这样的代码: try: return map(float, result) except ValueError, e: print "error", e 在方法的返回部分使用try/except是否正确? 有没有更明智的方法来解决这个问题?如果在包含return语句的代码块周围加上try/except子句,那么在实际发生异常的情况下,您肯定应该考虑应该返回什么: 在您的示例中,函数只返回None。如果这就是您想要的,我建议您明确地添加一个return None
try:
return map(float, result)
except ValueError, e:
print "error", e
在方法的返回部分使用try/except是否正确?
有没有更明智的方法来解决这个问题?如果在包含
return
语句的代码块周围加上try
/except
子句,那么在实际发生异常的情况下,您肯定应该考虑应该返回什么:
在您的示例中,函数只返回None
。如果这就是您想要的,我建议您明确地添加一个return None
like
except ValueError, e:
print "error", e
return None
在块中,除
之外,以清楚说明事实
其他可能是返回“默认值”(本例中为空映射)或使用
except ValueError, e:
print "error", e
raise
这取决于函数的使用方式,在什么情况下会出现异常,以及您希望选择的一般设计。保持简单:无尝试块
我花了一段时间才了解到,在Python中,函数抛出异常是很自然的。我花了太多精力在问题发生的地方处理这些问题
如果简单地让异常冒泡出来,代码会变得更简单,也更容易维护。这允许在适当的情况下检测级别上的问题
一种选择是:
try:
return map(float, result)
except ValueError, e:
print "error", e
raise
但这从深层次的功能中引入了打印。raise
也可以提供同样的功能,让上层代码执行适当的操作
在这种情况下,我的首选解决方案看起来是:
return map(float, result)
如果出现问题,不需要到处乱跳、做、做预期要做的事情,也不需要抛出异常。正如在有异常的语言中经常出现的情况一样,程序员假定打印错误消息“处理”了它 打印错误消息不会处理任何事情;你也可以把
pass
放在那里。这会导致问题,因为代码期望try
块完成某些事情,而某些事情没有发生
在Python中,您应该:
因此,除非您知道您的代码可以接受一个空列表,否则您不应该返回任何您认为值得使用try块的内容。是的,您可以使用
try
围绕return
。这里没有足够的上下文来建议“更好”的方法。请注意,您的方法将按原样返回None
。更广泛的上下文将允许更智能的建议。如果map()
导致错误,您希望在该函数中发生什么?除了打印错误之外。是否希望函数返回None
?返回另一个值?要允许异常在打印错误后向上传播调用堆栈?如果映射结果良好,则结果中应该有f.e.[22.99,44.34],但如果错误,则最好引发一些异常,但不要停止程序的执行