为什么在try/except块中使用Python的“else”子句?

2024-06-16 12:22:49 发布

您现在位置:Python中文网/ 问答频道 /正文

Possible Duplicate:
Python try-else

我没有看到它的好处,至少基于我在Dive to Python中读到的示例:

try:
    from EasyDialogs import AskPassword
except ImportError:
    getpass = default_getpass
else:
    getpass = AskPassword

http://www.diveintopython.net/file_handling/index.html

为什么不能用较短/更简单的方法达到同样的效果:

^{pr2}$

我错过了什么?在


Tags: tofromimportdefault示例elsetryexcept
2条回答

这个例子没有任何优势,除了风格上的可能。通常,最好将可能导致异常的代码保存在处理异常的代码附近。例如,比较一下:

try:
    from EasyDialogs import AskPassword
    # 20 other lines
    getpass = AskPassword
except ImportError:
    getpass = default_getpass

以及

^{pr2}$

except不能提前返回或重新抛出异常时,第二种方法是好的。如果可能,我会写:

try:
    from EasyDialogs import AskPassword
except ImportError:
    getpass = default_getpass
    return False // or throw Exception('something more descriptive')

# 20 other lines
getpass = AskPassword

我个人觉得在某些情况下更清楚。当然,当异常发生时,应该运行更多的代码。所以在某种程度上你是在说:

try:
    this_very_dangerous_call()
except ValueError:
    # if it breaks
    handle_value_error()
else:
    continue_with_my_code()
    # more code

因此,您可以将异常处理代码从其余代码中分离出来。这就像是说:“试试这个,如果它坏了就做点什么,如果它没有(在这里插入详细的解释)”

相关问题 更多 >