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>'>>>>>'</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>>>>>></code><code>2</code>
<code>是整型</code>
<code>>>>>>a</code>
<code>非整型</code>
使用try except处理
<code> </code><code>inp</code><code>=</code><code>input</code><code>(</code><code>'>>: '</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>>>: 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>>>: @</code>
<code>invalid literal </code><code>for</code> <code>int</code><code>() with base </code><code>10</code><code>: </code><code>'@'</code>
<code>>>: </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,如需转载请自行联系原作者