一、按照自己的方式出錯
1、raise語句
raise語句可以引發異常:
>>> raise exception
traceback (most recent call last):
file "", line 1, in raise exception
exception
>>> raise exception('hyperdrive overload')
traceback (most recent call last):
file "", line 1, in raise exception('hyperdrive overload')
exception: hyperdrive overload
可以使用dir函式列出模組的內容:
>>> import exceptions
>>> dir(exceptions)
['arithmeticerror', 'assertionerror', 'attributeerror', 'baseexception', 'buffererror', 'byteswarning', 'deprecationwarning',
'eoferror', 'environmenterror', 'exception', 'floatingpointerror', 'futurewarning', 'generatorexit', 'ioerror', 'importerror',
'importwarning', 'indentationerror', 'indexerror', 'keyerror', 'keyboardinterrupt', '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',
'windowserror', 'zerodivisionerror', '__doc__', '__name__', '__package__']
一些重要的內建異常類:
2、自定義異常類
自定義異常類只需要繼承exception類
>>> class somecustomexception(exception):pass
二、捕捉異常捕捉異常使用try/except
try:
x=input('enter the first number: ')
y=input('enter the second number: ')
print x/y
except zerodivisionerror:
print "the second number can't be zero!"
三、不止乙個except子句
try:
x=input('enter the first number: ')
y=input('enter the second number: ')
print x/y
except zerodivisionerror:
print "the second number can't be zero!"
except typeerror:
print "that wasn't a number.was it?"
四、用乙個塊捕捉兩個異常如果需要用乙個塊捕捉多個異常,那麼可以將它們作為元祖列出:
try:
x=input('enter the first number: ')
y=input('enter the second number: ')
print x/y
except (zerodivisionerror,typeerror,nameerror):
print "your number were bogus..."
五、捕捉物件如果希望在except子句中訪問異常物件本身,可以使用兩個引數(注意,如果是捕捉到多個異常,需要向except子句提供乙個引數——元祖。第二個引數e):
try:
x=input('enter the first number: ')
y=input('enter the second number: ')
print x/y
except (zerodivisionerror,typeerror,),e:
print e
六、全捕捉如果想捕捉所有異常,可以在except子句中忽略所有的異常類:
try:
x=input('enter the first number: ')
y=input('enter the second number: ')
print x/y
except:
像上述捕捉異常是危險的,因為它會隱藏所有程式設計師為想到的並且未做好準備處理的錯誤。這時用except exception, e會更好些,或者對異常物件e進行一些檢查。
七、try/except加上else子句
try:
print 'a ****** task'
except:
print 'what? something went wrong?'
else:
print 'ah....it went as planned.'
執行結果為:
a ****** task
ah....it went as planned.
八、finally子句
x=none
try:
x=1/0
finally:
print 'cleaning up....'
del x
finally子句肯定會執行,不管try子句中是否發生異常。
還可以和else一起使用:
try:
1/0except nameerror:
print "unknown variable"
else:
print "that went well!"
finally:
print "cleaning up"
九、異常和函式如果異常在函式內引發而不處理,它就會傳播至函式呼叫的地方。如果依舊沒有被處理,就會繼續傳播,直到主程式。如果還沒有被處理,程式會帶著棧跟蹤中止。
>>> def faulty():
raise exception('something is wrong')
>>> def ignore_exception():
faulty()
>>> def handle_exception():
try:
faulty()
except:
print 'exception handled'
>>> ignore_exception()
traceback (most recent call last):
file "", line 1, in ignore_exception()
file "", line 2, in ignore_exception
faulty()
file "", line 2, in faulty
raise exception('something is wrong')
exception: something is wrong
>>> handle_exception()
exception handled
本章新函式:
Python基礎教程 第8章 異常
1.自定義異常 繼承exception 1.自定義異常類 方法 從exception類繼承 class somecustomexception exception pass2.處理異常 1 捕捉異常 try except try x input enter the first number y in...
第8章 異常控制流
8.1.1 異常處理 處理會把一些處理器的狀態壓入棧中,返回時重新恢復在這些狀態 當控制從使用者程式轉移到核心時,所有這些專案都會被壓入到核心的棧中,而不是使用者的棧 異常處理程式執行在核心的模式下,這意味著對所有的系統資源有完全的訪問許可權 8.1.2 異常的類別 異常可以為四種 中斷 inter...
第8章指標
1.指標 指標是儲存記憶體位址的變數。在記憶體中每一塊儲存單元都有相對應的唯一的位址編號,指標就是一塊儲存這種編號的空間 2.對於乙個變數可以用 符號來獲取它的位址 int a int p a 什麼樣的變數,就需要宣告對應的型別的指標。這是為了告訴系統,我從這個位址開始要讀取多少位的記憶體塊,才能正...