天天看点

python中的错误处理

错误的处理语法:

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 ,如需转载请自行联系原作者