Why use Python's “else” clause in try/except block?
本问题已经有最佳答案,请猛点这里访问。
Possible Duplicate:
Python try-else
我没有看到它的好处,至少根据我刚刚在Dive into python中读到的示例:
1 2 3 4 5 6 | try: from EasyDialogs import AskPassword except ImportError: getpass = default_getpass else: getpass = AskPassword |
(http://www.diveintopython.net/file_handling/index.html)
为什么你不能用更短/更简单的方法达到同样的效果?
1 2 3 4 5 | try: from EasyDialogs import AskPassword getpass = AskPassword except ImportError: getpass = default_getpass |
我错过了什么?
在这个例子中没有优势,除了样式。通常,最好保留代码,这样可以在处理它们的代码附近引起异常。例如,比较以下内容:
1 2 3 4 5 6 | try: from EasyDialogs import AskPassword # 20 other lines getpass = AskPassword except ImportError: getpass = default_getpass |
和
1 2 3 4 5 6 7 | try: from EasyDialogs import AskPassword except ImportError: getpass = default_getpass else: # 20 other lines getpass = AskPassword |
当
1 2 3 4 5 6 7 8 | 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 3 4 5 6 7 8 | try: this_very_dangerous_call() except ValueError: # if it breaks handle_value_error() else: continue_with_my_code() # more code |
因此,您可以直观地将异常处理代码与其余代码分开。就像是说:"试试这个,如果它坏了做点什么,如果它不[在这里插入长解释]"