<p>您的代码段不应引发任何异常。也许你想做点像</p>
<pre><code>try:
if g > h:
print 'Hey'
else:
raise NotImplementedError('This condition is not handled here!')
except Exception as e:
# ...
</code></pre>
<p>另一种可能是你想说:</p>
<pre><code>try:
assert g > h
print 'Hey!'
except AssertionError as e:
# ...
</code></pre>
<p><code>assert</code>关键字的行为基本上类似于“fail-safe”。如果条件为false,它将引发<code>AssertionError</code>异常。它通常用于检查函数参数的前提条件。(假设一个值必须大于零,函数才有意义。)</p>
<hr/>
<p><strong>编辑:</strong></p>
<p>异常是代码中的一种“信号”,它停止程序正在执行的任何操作,并找到最近的“异常处理程序”。每当程序中发生异常时,所有执行都立即停止,并尝试转到代码中最近的<code>except:</code>部分。如果不存在,程序就会崩溃。尝试执行以下程序:</p>
<pre><code>print 'Hello. I will try doing a sum now.'
sum = 3 + 5
print 'This is the sum: ' + str(sum)
print 'Now I will do a division!'
quotient = 5/0
print 'This is the result of that: ' + str(quotient)
</code></pre>
<p>如果你运行它,你会看到你的程序崩溃了。我的Python告诉我:</p>
<pre><code>ZeroDivisionError: integer division or modulo by zero
</code></pre>
<p>这是个例外!出事了!当然,你不能被零除。如您所知,这个异常是一种信号,它找到最近的<code>exception:</code>块,或者<em>异常处理程序</em>。我们可以重写这个程序,这样更安全。你知道吗</p>
<pre><code>try:
print 'Hello. I will try doing a sum now.'
sum = 3 + 5
print 'This is the sum: ' + str(sum)
print 'Now I will do a division!'
quotient = 5/0
print 'This is the result of that: ' + str(quotient)
except Exception as e:
print 'Something exceptional occurred!'
print e
</code></pre>
<p>现在我们捕捉异常,异常发生的信号。我们把信号放在变量<code>e</code>中,然后打印出来。现在你的程序将导致</p>
<pre><code>Something exceptional occurred!
integer division or modulo by zero
</code></pre>
<p>当<code>ZeroDivisionError</code>异常发生时,它在该点停止执行,并直接转到异常处理程序。如果需要,我们也可以手动引发异常。你知道吗</p>
<pre><code>try:
print 'This you will see'
raise Exception('i broke your code')
print 'This you will not'
except Exception as e:
print 'But this you will. And this is the exception that occurred:'
print e
</code></pre>
<p><code>raise</code>关键字手动发送异常信号。有不同种类的异常,比如<code>ZeroDivisionError</code>异常,<code>AssertionError</code>异常,<code>NotImplementedError</code>异常等等,但我把这些留给进一步的研究。你知道吗</p>
<p>在您的原始代码中,没有异常发生,因此您从未看到异常被触发。如果希望基于条件触发异常(如<code>g > h</code>),可以使用<code>assert</code>关键字,其行为有点像<code>raise</code>,但它仅在条件为false时引发异常。所以如果你写信</p>
<pre><code>try:
print 'Is all going well?'
assert 3 > 5
print 'Apparently so!'
except AssertionError as e:
print 'Nope, it does not!'
</code></pre>
<p>你永远不会看到“显然如此!”消息,因为断言为false并触发异常。断言有助于确保值在程序中有意义,如果没有意义,则希望中止当前操作</p>
<p>(请注意,我在异常处理代码中显式捕获了<code>AssertionError</code>)。这不会捕获其他异常,只捕获<code>AssertionError</code>s。如果您继续阅读有关异常的内容,您很快就会了解到这一点。现在不要太担心他们。)</p>