擅长:python、mysql、java
<p>Python不同意异常只应用于异常情况的想法,事实上,习惯用法是<a href="http://docs.python.org/2/glossary.html#term-eafp" rel="noreferrer">'ask for forgiveness, not permission'</a>。这意味着将异常作为流程控制的常规部分是完全可以接受的,而且事实上是受鼓励的</p>
<p>这通常是一件好事,因为以这种方式工作有助于避免一些问题(作为一个明显的例子,通常可以避免竞争条件),而且它往往会使代码更具可读性</p>
<p>假设您有一种情况,您接受一些需要处理的用户输入,但有一个已处理的默认值。<code>try: ... except: ... else: ...</code>结构使代码非常可读:</p>
<pre><code>try:
raw_value = int(input())
except ValueError:
value = some_processed_value
else: # no error occured
value = process_value(raw_value)
</code></pre>
<p>与它在其他语言中的工作方式相比:</p>
<pre><code>raw_value = input()
if valid_number(raw_value):
value = process_value(int(raw_value))
else:
value = some_processed_value
</code></pre>
<p>注意优点。不需要检查值是否有效并单独解析它,它们只执行一次。代码也遵循一个更符合逻辑的进程,主代码路径是第一个,然后是“如果不起作用,就这样做”</p>
<p>这个例子自然有点做作,但它显示了这种结构的一些情况</p>