为什么在try/except块中使用Python的“else”子句?
可能重复的问题:
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
我错过了什么?
2 个回答
2
我个人觉得在某些情况下这样写更清晰。通常来说,当没有发生错误的时候,大部分代码应该被执行。所以从某种意义上来说,你可以理解为:
try:
this_very_dangerous_call()
except ValueError:
# if it breaks
handle_value_error()
else:
continue_with_my_code()
# more code
这样你就把处理错误的代码和其他代码分开了。就像是在说:“试试这个,如果出错了就做点什么,如果没出错的话[这里插入长长的解释]”
7
这个例子没有什么特别的好处,可能只是风格上的不同。一般来说,把可能出错的代码放在处理这些错误的代码附近是个好主意。比如,看看这两个代码:
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
第二种写法在处理异常时,如果不能提前返回或者重新抛出异常,就比较合适。如果可以的话,我会这样写:
try:
from EasyDialogs import AskPassword
except ImportError:
getpass = default_getpass
return False // or throw Exception('something more descriptive')
# 20 other lines
getpass = AskPassword