python基礎之異常處理

2021-09-08 11:57:52 字數 3748 閱讀 9722

為了增加程式設計的友好性,避免程式出現bug時將錯誤資訊顯示給使用者,有了異常處理這個好東東.

while true:

num1=input('num1:')

num2=input('num2:')

try:

num1=int(num1)

num2=int(num2)

except exception as ex:

print(ex)

python中的異常非常多,每個異常專門處理某一項的異常:

attributeerror 試圖訪問乙個物件沒有的樹形,比如foo.x,但是foo沒有屬性x

ioerror 輸入/輸出異常;基本上是無法開啟檔案

importerror 無法引入模組或包;基本上是路徑問題或名稱錯誤

indentationerror 語法錯誤(的子類) ;**沒有正確對齊

indexerror 下標索引超出序列邊界,比如當x只有三個元素,卻試圖訪問x[5]

keyerror 試圖訪問字典裡不存在的鍵

keyboardinterrupt ctrl+c被按下

nameerror 使用乙個還未被賦予物件的變數

syntaxerror python**非法,**不能編譯(個人認為這是語法錯誤,寫錯了)

typeerror 傳入物件型別與要求的不符合

unboundlocalerror 試圖訪問乙個還未被設定的區域性變數,基本上是由於另有乙個同名的全域性變數,

導致你以為正在訪問它

valueerror 傳入乙個呼叫者不期望的值,即使值的型別是正確的

more:

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

a=[1,2,3,4]

try:

#print(b) #如果新增此項,直接報錯,indexerror不攔截

a[40]

except indexerror as ex:

print(ex)

out:

list index out of range
在上面的異常中,不能處理其他功能的異常,於是就引出了乙個萬能的異常exception,他可以捕獲任意異常,就是此篇剛開始的程式裡的東東.

那麼問題來了,既然有了這個萬能異常,那其他的能否忽略呢?答案是當然不能了,對於特殊處理或提醒的異常需要先定義,最後定義exception來確保程式正常執行.

s1 = 'hello'

try:

int(s1)

except keyerror as e:

print '鍵錯誤'

except indexerror as e:

print '索引錯誤'

except exception as e:

print '錯誤'

因為**是從上到下執行的,所以為了避免exception攔截,需要把

try:

pass #主**塊

except exception as ex: #異常**塊

pass

else: #正常**塊

pass

finally: #不管正確與否,都執行此**塊

pass

執行順序為執行try,正確執行else,然後finally;執行try,錯誤執行except,然後finally.

try:

raise exception('error!!')

except exception as ex:

print(ex)

class cc(exception):

def __init__(self,message):

self.message=message

def __str__(self):

return self.message

try:

raise cc('hello,world!!')

except cc as ex:

print(ex)

out:

hello,world!!
assert 1 == 2

assert 1 == 1

out:

traceback (most recent call last):

file "/users/shane/pycharmprojects/py_study/base/test/page.py", line 89, in assert 1 == 2

assertionerror

如果報錯,會有assertionerror報錯.

乙個判斷數字是否質數的程式:

def isprime(n):

"""this function return a number is a prime or not"""

assert n >= 2

from math import sqrt

for i in range(2, int(sqrt(n))+1):

if n % i == 0:

return false

return true

res=isprime(22)

print(res)

python基礎之異常處理

引入 程式執行時,難免出現bug,當出現bug時,使用者可能很難明白那一堆報錯 到底是個什麼東西,為了讓使用者能更清楚知道錯誤原因或者直接對使用者將此錯誤遮蔽,異常處理就應運而生。格式 try 輸入要執行的 pass except nameerror as err 將該型別的錯誤捕獲 pass ex...

python基礎之異常處理

1.程式中難免出現錯誤,而錯誤分成兩種 1.語法錯誤 這種錯誤,根本過不了python直譯器的語法檢測,必須在程式執行前就改正 語法錯誤示範一 if 語法錯誤示範二 def test pass 語法錯誤示範三 print haha 2.邏輯錯誤 使用者輸入不完整 比如輸入為空 或者輸入非法 輸入不是...

Python基礎學習之異常處理

編寫程式時,如果遇到異常,且沒有被處理,那麼程式自動結束而不會執行後面的 塊。在io輸入輸出,運算時或者多執行緒處理常會遇到異常,這時需要對其進行預處理,異常也是乙個物件。異常處理 基本框架為 try 正常執行,可能遇到錯誤的 塊 except exceptional exception2 exce...