天天看點

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

繼續閱讀