错误的处理语法:
try ... except ... finally ...
把可能会出错的代码放到try语句里面,执行出错,执行except语句块。如果有finally语句块,则执行finally语句块。执行没有错,不执行except语句块,但是一定会执行finally语句块。
可以有多个不同的except语句块。
实例:
<code>try</code><code>:</code>
<code> </code><code>print</code><code>(</code><code>'try...'</code><code>)</code>
<code> </code><code>r </code><code>=</code> <code>10</code><code>/</code><code>int</code><code>(</code><code>'a'</code><code>)</code>
<code> </code><code>print</code><code>(</code><code>'result:'</code><code>, r)</code>
<code>except</code> <code>ValueError as e:</code>
<code> </code><code>print</code><code>(</code><code>'ValueError: '</code><code>, e)</code>
<code>except</code> <code>ZeroDivisionError as e:</code>
<code> </code><code>print</code><code>(</code><code>'ZeroDivisionError: '</code><code>, e)</code>
<code>finally</code><code>:</code>
<code> </code><code>print</code><code>(</code><code>'finally...'</code><code>)</code>
<code>print</code><code>(</code><code>'END'</code><code>)</code>
如果没有错误发生,可以在except后面加一个else,自动执行else。
<code>else</code><code>:</code>
<code> </code><code>print</code><code>(</code><code>'no error!'</code><code>)</code>
python所有的错误都继承于BaseException,捕获错误可以跨越多层调用。
抛出错误
要抛出错误,首先需要定义一个错误的class,选择好继承关系,然后使用raise语句抛出一个错误的实例。
<code>class</code> <code>FooError(ValueError):</code>
<code> </code><code>pass</code>
<code> </code>
<code>def</code> <code>foo(s):</code>
<code> </code><code>n </code><code>=</code> <code>int</code><code>(s)</code>
<code> </code><code>if</code> <code>n </code><code>=</code><code>=</code> <code>0</code><code>:</code>
<code> </code><code>raise</code> <code>FooError(</code><code>'invalid value: %s'</code> <code>%</code> <code>s)</code>
<code> </code><code>return</code> <code>10</code> <code>/</code> <code>n</code>
<code> </code>
<code>foo(</code><code>'0'</code><code>)</code>
python debug的方法:
直接print(),简单粗暴。
断言assert
用print的地方都可以用assert来替代。
示例:
<code> </code><code>assert</code> <code>n !</code><code>=</code> <code>0</code><code>, </code><code>'n is zero!'</code>
<code> </code><code>return</code> <code>10</code><code>/</code><code>n</code>
<code>def</code> <code>main():</code>
<code> </code><code>foo(</code><code>'0'</code><code>)</code>
断言失败,assert会抛出AssertionError:
logging
把assert换成logging,logging不会抛出错误,可以输出到文件。
<code>import</code> <code>logging</code>
<code>logging.basicConfig(level</code><code>=</code><code>logging.INFO) </code><code># level的级别有debug,info, warning, error</code>
<code>s </code><code>=</code> <code>'0'</code>
<code>n </code><code>=</code> <code>int</code><code>(s)</code>
<code>logging.info(</code><code>'n=%d'</code> <code>%</code> <code>n)</code>
<code>print</code><code>(</code><code>10</code><code>/</code><code>n)</code>
本文转自ting2junshui51CTO博客,原文链接:http://blog.51cto.com/ting2junshui/1751835 ,如需转载请自行联系原作者