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,如需轉載請自行聯系原作者