天天看点

python_day8_异常处理

1、 异常

2、 异常种类

3、 异常处理

   异常就是程序运行中发生的错误信号,如程序产生问题,而没有处理它,程序运行就将停止,py中错误触发的异常如下

2、异常种类

  一般异常

<code>AttributeError 试图访问一个对象没有的属性,比如foo.x,但是foo没有属性x</code>

<code>    </code><code>def</code> <code>Foo():</code>

<code>        </code><code>pass</code>

<code>    </code><code>Foo.x    </code><code># AttributeError: 'function' object has no attribute 'x'  # 因为调用没有字典属性的值</code>

<code>    </code> 

<code>IOError 输入</code><code>/</code><code>输出异常;基本上是无法打开文件</code>

<code>ImportError 无法引入模块或包;基本上是路径问题或名称错误</code>

<code>IndentationError 语法错误(的子类) ;代码没有正确对齐</code>

<code>IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[</code><code>5</code><code>]</code>

<code>    </code><code>l</code><code>=</code><code>[]</code>

<code>    </code><code>l[</code><code>1111</code><code>]        </code><code># IndexError: list index out of range  索引问题</code>

<code>KeyError 试图访问字典里不存在的键</code>

<code>KeyboardInterrupt Ctrl</code><code>+</code><code>C被按下</code>

<code>NameError 使用一个还未被赋予对象的变量</code>

<code>SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了)</code>

<code>TypeError 传入对象类型与要求的不符合</code>

<code>UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,</code>

<code>导致你以为正在访问它</code>

<code>ValueError 传入一个调用者不期望的值,即使值的类型是正确的</code>

<code>PermissionError   权限问题   </code>

<code>    </code><code>with </code><code>open</code><code>(</code><code>'a.txt'</code><code>,</code><code>'w'</code><code>,encoding</code><code>=</code><code>'utf-8'</code><code>) as F:</code>

<code>        </code><code>F.write(</code><code>'111'</code><code>)    </code><code># PermissionError: [Errno 13] Permission denied: 'a.txt'</code>

其它花式异常

<code>ArithmeticError</code>

<code>AssertionError</code>

<code>AttributeError</code>

<code>BaseException</code>

<code>BufferError</code>

<code>BytesWarning</code>

<code>DeprecationWarning</code>

<code>EnvironmentError</code>

<code>EOFError</code>

<code>Exception</code>

<code>FloatingPointError</code>

<code>FutureWarning</code>

<code>GeneratorExit</code>

<code>ImportError</code>

<code>ImportWarning</code>

<code>IndentationError</code>

<code>IndexError</code>

<code>IOError</code>

<code>KeyboardInterrupt</code>

<code>KeyError</code>

<code>LookupError</code>

<code>MemoryError</code>

<code>NameError</code>

<code>NotImplementedError</code>

<code>OSError</code>

<code>OverflowError</code>

<code>PendingDeprecationWarning</code>

<code>ReferenceError</code>

<code>RuntimeError</code>

<code>RuntimeWarning</code>

<code>StandardError</code>

<code>StopIteration</code>

<code>SyntaxError</code>

<code>SyntaxWarning</code>

<code>SystemError</code>

<code>SystemExit</code>

<code>TabError</code>

<code>TypeError</code>

<code>UnboundLocalError</code>

<code>UnicodeDecodeError</code>

<code>UnicodeEncodeError</code>

<code>UnicodeError</code>

<code>UnicodeTranslateError</code>

<code>UnicodeWarning</code>

<code>UserWarning</code>

<code>ValueError</code>

<code>Warning</code>

<code>ZeroDivisionError</code>

  使用if处理异常

<code>while</code> <code>True</code><code>:</code>

<code>    </code><code>inp</code><code>=</code><code>input</code><code>(</code><code>'&gt;&gt;&gt;&gt;&gt;'</code><code>)</code>

<code>    </code><code>if</code> <code>inp.isdigit():</code>

<code>        </code><code>inp</code><code>=</code><code>int</code><code>(inp)</code>

<code>        </code><code>print</code><code>(</code><code>'是整型'</code><code>)</code>

<code>        </code><code>continue</code>

<code>    </code><code>else</code><code>:</code>

<code>        </code><code>print</code><code>(</code><code>'非整型'</code><code>)</code>

打印结果:

<code>&gt;&gt;&gt;&gt;&gt;</code><code>2</code>

<code>是整型</code>

<code>&gt;&gt;&gt;&gt;&gt;a</code>

<code>非整型</code>

使用try except处理

<code>    </code><code>inp</code><code>=</code><code>input</code><code>(</code><code>'&gt;&gt;: '</code><code>)</code>

<code>    </code><code>try</code><code>:</code>

<code>        </code><code>inp </code><code>=</code> <code>int</code><code>(inp)</code>

<code>        </code><code>break</code>

<code>    </code><code>except</code> <code>Exception as e:</code>

<code>        </code><code>print</code><code>(e)</code>

打印结果

<code>&gt;&gt;: a</code>

<code>invalid literal </code><code>for</code> <code>int</code><code>() with base </code><code>10</code><code>: </code><code>'a'</code>

<code>&gt;&gt;: @</code>

<code>invalid literal </code><code>for</code> <code>int</code><code>() with base </code><code>10</code><code>: </code><code>'@'</code>

<code>&gt;&gt;: </code><code>1</code>         <code># 输出是整型,那么就直接退出</code>

<code>Process finished with exit code </code><code>0</code>

#### if跟try except都可以做异常处理,个人喜欢碰到实在是一些奇奇怪怪的提示才会使用try直接返回一个结果,然后再拿那个结果做判断

     本文转自812374156 51CTO博客,原文链接:http://blog.51cto.com/xiong51/2056713,如需转载请自行联系原作者

继续阅读