天天看點

Python 異常處理

1、異常基礎

在程式設計過程中為了增加友好性,在程式出現bug時一般不會将錯誤資訊顯示給使用者,而是現實一個提示的頁面,通俗來說就是不讓使用者看見大黃頁!!!

1

2

3

4

try

:

pass

except

Exception,ex:

pass

需求:将使用者輸入的兩個數字相加

Python 異常處理
Python 異常處理
while True:
    num1 = raw_input('num1:')
    num2 = raw_input('num2:')
    try:
        num1 = int(num1)
        num2 = int(num2)
        result = num1 + num2
    except Exception, e:
        print '出現異常,資訊如下:'
        print e      
Python 異常處理

2、異常種類

python中的異常種類非常多,每個異常專門用于處理某一項異常!!!

Python 異常處理
Python 異常處理
1 AttributeError 試圖通路一個對象沒有的樹形,比如foo.x,但是foo沒有屬性x
 2 IOError 輸入/輸出異常;基本上是無法打開檔案
 3 ImportError 無法引入子產品或包;基本上是路徑問題或名稱錯誤
 4 IndentationError 文法錯誤(的子類) ;代碼沒有正确對齊
 5 IndexError 下标索引超出序列邊界,比如當x隻有三個元素,卻試圖通路x[5]
 6 KeyError 試圖通路字典裡不存在的鍵
 7 KeyboardInterrupt Ctrl+C被按下
 8 NameError 使用一個還未被賦予對象的變量
 9 SyntaxError Python代碼非法,代碼不能編譯(個人認為這是文法錯誤,寫錯了)
10 TypeError 傳入對象類型與要求的不符合
11 UnboundLocalError 試圖通路一個還未被設定的局部變量,基本上是由于另有一個同名的全局變量,
12 導緻你以為正在通路它
13 ValueError 傳入一個調用者不期望的值,即使值的類型是正确的
14 
15 常用異常      

常用異常

Python 異常處理
Python 異常處理
ArithmeticError
AssertionError
AttributeError
BaseException
BufferError
BytesWarning
DeprecationWarning
EnvironmentError
EOFError
Exception
FloatingPointError
FutureWarning
GeneratorExit
ImportError
ImportWarning
IndentationError
IndexError
IOError
KeyboardInterrupt
KeyError
LookupError
MemoryError
NameError
NotImplementedError
OSError
OverflowError
PendingDeprecationWarning
ReferenceError
RuntimeError
RuntimeWarning
StandardError
StopIteration
SyntaxError
SyntaxWarning
SystemError
SystemExit
TabError
TypeError
UnboundLocalError
UnicodeDecodeError
UnicodeEncodeError
UnicodeError
UnicodeTranslateError
UnicodeWarning
UserWarning
ValueError
Warning
ZeroDivisionError

更多異常      

更多異常

Python 異常處理
Python 異常處理
dic = ["wupeiqi", 'alex']
try:
    dic[10]
except IndexError, e:
    print e      

執行個體:IndexEror

Python 異常處理
Python 異常處理
dic = {'k1':'v1'}
try:
    dic['k20']
except KeyError, e:
    print e      

執行個體:KeyError

Python 異常處理
Python 異常處理
s1 = 'hello'
try:
    int(s1)
except ValueError, e:
    print e      

執行個體:ValueError

對于上述執行個體,異常類隻能用來處理指定的異常情況,如果非指定異常則無法處理。

5

6

7

# 未捕獲到異常,程式直接報錯

s1 

=

'hello'

try

:

int

(s1)

except

IndexError,e:

print

e

是以,寫程式時需要考慮到try代碼塊中可能出現的任意異常,可以這樣寫:

8

9

s1 

=

'hello'

try

:

int

(s1)

except

IndexError,e:

print

e

except

KeyError,e:

print

e

except

ValueError,e:

print

e

萬能異常 在python的異常中,有一個萬能異常:Exception,他可以捕獲任意異常,即:

s1 

=

'hello'

try

:

int

(s1)

except

Exception,e:

print

e

接下來你可能要問了,既然有這個萬能異常,其他異常是不是就可以忽略了!

答:當然不是,對于特殊處理或提醒的異常需要先定義,最後定義Exception來確定程式正常運作。

s1 

=

'hello'

try

:

int

(s1)

except

KeyError,e:

print

'鍵錯誤'

except

IndexError,e:

print

'索引錯誤'

except

Exception, e:

print

'錯誤'

3、異常其他結構

10

11

12

try

:

# 主代碼塊

pass

except

KeyError,e:

# 異常時,執行該塊

pass

else

:

# 主代碼塊執行完,執行該塊

pass

finally

:

# 無論異常與否,最終執行該塊

pass

4、主動觸發異常

try

:

raise

Exception(

'錯誤了。。。'

)

except

Exception,e:

print

e

5、自定義異常

class

WupeiqiException(Exception):

def

__init__(

self

, msg):

self

.message 

=

msg

def

__str__(

self

):

return

self

.message

try

:

raise

WupeiqiException(

'我的異常'

)

except

WupeiqiException,e:

print

e

6、斷言

# assert 條件

assert

1

=

=

1

assert

1

=

=

2

作者:楊永明

出處:https://www.cnblogs.com/ming5218/

本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接。