如果我在函数结尾处有这样的代码:
try:
return map(float, result)
except ValueError, e:
print "error", e
在方法的返回部分使用try / except是否正确? 有没有更明智的方法来解决这个问题?
答案 0 :(得分:4)
我花了一些时间来学习,在Python中很自然,函数会抛出异常。我已经花了太多精力在发生问题的地方处理这些问题。
如果只是让异常冒出来,代码可以变得更简单,也更容易维护。这允许在适当的位置检测级别上的问题。
一个选项是:
try:
return map(float, result)
except ValueError, e:
print "error", e
raise
但是这引入了一些深层功能的打印。 raise
可以提供相同的功能,让上层代码执行适当的操作。
在此背景下,我的首选解决方案:
return map(float, result)
如果出现问题,无需跳舞,做,预期做什么,并抛出异常。
答案 1 :(得分:0)
如果您包含带有return
/ try
子句的except
语句的代码块,如果实际发生异常,您肯定应该考虑应该返回的内容:
在您的示例中,该函数将只返回None
。如果它是您想要的,我建议明确添加return None
之类的
except ValueError, e:
print "error", e
return None
在except
区块中明确说明这一事实。
其他可能性是返回“默认值”(在这种情况下为空地图)或使用
“重新加载”异常except ValueError, e:
print "error", e
raise
这取决于函数的使用方式,在什么情况下您希望例外以及您的一般设计选择哪个选项。
答案 2 :(得分:0)
在具有例外的语言中经常出现这种情况,程序员认为打印错误消息会“处理”它。
打印错误消息无法处理任何事情;你可能会把pass
放在那里。这会导致问题,因为代码期望try
块可以完成某些操作并且没有发生某些事情。
在Python中,你应该:
让程序中止异常比运行并产生不准确的结果要好得多。
因此,除非您知道您的代码可以接受空列表,否则您不应该返回任何您认为应该尝试阻止的内容。