python學習記錄(八)

2022-09-11 23:30:38 字數 4293 閱讀 8680

0910--

python異常

python用異常物件(exception object)來表示異常情況。遇到錯誤後。會引發異常。如果異常物件未被處理或捕捉,程式就會用所謂的回溯(traceback,一種錯誤資訊)終止執行:

>>> 1/0

traceback (most recent call last):

file

"", line 1, in

1/0zerodivisionerror: division by zero

raise語句為了引發異常,可以使用乙個類(exception的子類)或者例項引數呼叫raise語句。下面的例子使用內建的exception異常類:

>>> raise exception('

hyperdrive overload')

traceback (most recent call last):

file

"", line 1, in

raise exception('

hyperdrive overload')

exception: hyperdrive overload

系統自帶的內建異常類:

自定義異常

儘管內建的異常已經包括了大部分的情況,而且對於很多要求都已經足夠了,但有些時候還是需要建立自己的異常類。

和其他類一樣,只是要確保從exception類繼承,不管是直接繼承還是間接繼承。像下面這樣:

>>> class somecustomexception(exception):pass
捕捉異常使用try/except來實現異常的捕捉處理。

假設建立了乙個讓使用者輸入兩個數,然後進行相除的程式:

try

: x = int(input('

enter the first number:'))

y = int(input('

enter the sencond number:'))

z = x/y

print

(z)except

zerodivisionerror:

print('

輸入的數字不能為0!')

#輸入enter the first number:1enter the sencond number:0

輸入的數字不能為0!

假如,我們再除錯的時候引發異常會好些,如果在與使用者的進行互動的過程中又是不希望使用者看到異常資訊的。如何開啟/關閉「遮蔽」機制?

class

muffledcalulator:

muffled = false #

這裡預設關閉遮蔽

defcalc(self,expr):

try:

return

eval(expr)

except

zerodivisionerror:

ifself.muffled:

print ('

division by zero is illegal')

else

:

raise

#執行程式:

>>> calculator =muffledcalulator()

>>> calculator.calc('

10/2')

5>>> calculator.clac('

10/0')

traceback (most recent call last):

file

"", line 1, in

calculator.clac(

'10/0')

attributeerror: muffledcalulator instance has no attribute

'clac'#

異常資訊被輸出了

>>> calculator.muffled = true #

現在開啟遮蔽

>>> calculator.calc('

10/0')

divsion by zero

is illagal

多個except子句

如果執行輸入兩個數,求除法程式,輸入非數字的內容,還會產生另外乙個異常:

try

: x = int(input('

enter the first number:'))

y = int(input('

enter the sencond number:'))

z = x/y

print

(z)except

zerodivisionerror:

print('

輸入的數字不能為0!')

except

valueerror:

print('

請輸入數字')

#執行程式

enter the first number: 10enter the second number:

'hello,word

'請輸入數字!

乙個塊獲取多個異常

try

: x = int(input('

enter the first number:'))

y = int(input('

enter the second number:'))

print(x/y)

except

(zerodivisionerror,typeerror,nameerror,valueerror):

print("

輸入的內容有誤,請輸入非0數字!")

#執行程式

enter the first number:1enter the second number:0

輸入的內容有誤,請輸入非0數字!

#輸入非數字

enter the first number:a

輸入的內容有誤,請輸入非0數字!

捕捉全部異常就算以上處理了好幾種異常,總有不小心忽略處理的情況,如果真想用一段**捕捉所有異常,那麼可在except子句中忽略所有的異常類:

try

: x = int(input('

enter the first number:'))

y = int(input('

enter the second number:'))

print (x/y)

except

:

print ('

sorry,please enter again!')

#執行程式

enter the first number:1enter the second number:djfjshfjkd

sorry,please enter again!

加入迴圈,若使用者輸入了錯誤資訊,允許重新輸入

while

true:

try:

x = int(input('

enter the first number:'))

y = int(input('

enter the second number:'))

value = x/y

print ('

x/y is

',value)

break

except

:

print ('

輸入的內容無效,請重新輸入!')

#執行程式

enter the first number:a

輸入的內容無效,請重新輸入!

enter the first number:

輸入的內容無效,請重新輸入!

enter the first number:1enter the second number:0

輸入的內容無效,請重新輸入!

enter the first number:1enter the second number:3x/y is 0.3333333333333333

Python學習記錄八 異常

異常 python用異常物件 exception object 來表示異常情況。遇到錯誤後,會引發異常。如果異常物件並未被處理或捕捉,程式就會用所謂的回溯 traceback,一種錯誤資訊 終止執行。1 raise語句 raise exception traceback most recent ca...

STL學習記錄(八)Sets Multisets

set和multiset會依據一定的排序準則自動的將容器裡面的元素進行排序。這也就表明關聯容器與順序容器的乙個最大不同就是元素的順序與元素插入容器的先後無關。set multiset的不同在於前者不允許容器內部有相同的元素,而後者則是允許的。因為容器對元素進行自動排序,這就表明set multise...

彙編學習記錄之八

1.機器指令處理的資料所在位置 絕大部分機器指令都是進行資料處理的指令,處理大致可以分為三類 讀取 寫入 運算。在機器指令這一層來講,並不關心資料的值是多少,而關心指令執行前一刻,它將要處理的資料的所在位置。指令執行前,所要處理的資料可以在三個地方 cpu內部 記憶體 埠。2.組合語言中資料位置的表...