可能重复:
Python try-else
我没有看到它的好处,至少基于我刚刚在Dive Into Python中读到的例子:
try:
from EasyDialogs import AskPassword
except ImportError:
getpass = default_getpass
else:
getpass = AskPassword
(http://www.diveintopython.net/file_handling/index.html)
为什么不能用更短/更简单的方法达到同样的效果:
try:
from EasyDialogs import AskPassword
getpass = AskPassword
except ImportError:
getpass = default_getpass
我错过了什么?
答案 0 :(得分:5)
示例中没有优势,除了样式。保留代码可以在代码处理它们附近引起异常通常是一个好主意。例如,比较这些:
try:
from EasyDialogs import AskPassword
# 20 other lines
getpass = AskPassword
except ImportError:
getpass = default_getpass
和
try:
from EasyDialogs import AskPassword
except ImportError:
getpass = default_getpass
else:
# 20 other lines
getpass = AskPassword
当except
无法提前返回或重新抛出异常时,第二个是好的。如果可能的话,我会写:
try:
from EasyDialogs import AskPassword
except ImportError:
getpass = default_getpass
return False // or throw Exception('something more descriptive')
# 20 other lines
getpass = AskPassword
答案 1 :(得分:2)
我个人觉得在某些情况下更清楚。当发生不异常时,应该运行更多的代码。所以在某种程度上你说:
try:
this_very_dangerous_call()
except ValueError:
# if it breaks
handle_value_error()
else:
continue_with_my_code()
# more code
因此,您可以直观地将异常处理代码与其余代码分开。这就像是说:“尝试这个,如果它没有做某事,如果没有[在这里插入长篇解释]”