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],但如果错误,则最好引发一些异常,但不要停止程序的执行