3.4 練習題
兩個任務:1. 複習前面兩個 2. 異常處理學習
異常就是執行檢測到的錯誤。計算機語言針對可能出現的錯誤定義了異常型別,某種
【使用】
try
: 檢測範圍
except exception[
as reason]
: 出現異常後的處理**
try語句按照如下方式工作:
try
: f =
open
('test.txt'
)print
(f.read())
f.close(
)except oserror:
print
('開啟檔案出錯'
)# 【輸出】
# 開啟檔案出錯
乙個try語句對應多個except子句,分別來處理不同的特定的異常。在每處理乙個異常時最多對應乙個分支會被執行。
【例子】
try
:int
("abc"
) s =1+
'1' f =
open
('test.txt'
)print
(f.read())
f.close(
)except oserror as error:
print
('開啟檔案出錯\n原因是:'
+str
(error)
)except typeerror as error:
print
('型別出錯\n原因是:'
+str
(error)
)except valueerror as error:
print
('數值出錯\n原因是:'
+str
(error)
)# 【輸出】
# 數值出錯
# 原因是:invalid literal for int() with base 10: 'abc'
# 【例子】
dict1 =
try:
x = dict1[
'y']
except lookuperror:
print
('查詢錯誤'
)except keyerror:
print
('鍵錯誤'
)else
:print
(x)# 【輸出】
# 查詢錯誤
try-except-else語句嘗試查詢不在dict中的鍵值對,從而引發了異常。這一異常準確地說應屬於keyerror,但由於keyerror是lookuperror的子類,且將lookuperror置於keyerror之前,因此程式優先執行該except**塊。所以,使用多個except**塊時,必須堅持對其規範排序,要從最具針對性的異常到最通用的異常。
如果在try子句執行時沒有發生異常,python將執行else語句後的語句。
# 【模板1】
try:
檢測範圍
except exception[
as reason]
: 出現異常後的處理**
else:
不發生異常才會執行的**
# 【模板2】
try:
檢測範圍
except
:# 使用except而不帶任何異常型別,不是乙個很好的方式,預設捕獲所有異常
出現異常後的處理**
else
: 如果沒有異常執行這塊**
#【模板3】
try:
檢測範圍
except
(exception1, exception2,,..
.exception n)
:# 使用錯誤型別元組
發生以上多個異常中的乙個,執行這塊**
else
: 如果沒有異常執行這塊**
【例子】
dict1 =
try:
x = dict1[
'y']
except keyerror:
print
('鍵錯誤'
)except lookuperror:
print
('查詢錯誤'
)else
:print
(x)# 鍵錯誤
# 【例子】
try:
fh =
open
("testfile"
,"w"
) fh.write(
"這是乙個測試檔案,用於測試異常!!"
)except ioerror:
print
("error: 沒有找到檔案或讀取檔案失敗"
)else
:print
("內容寫入檔案成功"
) fh.close(
)# 【輸出】
# 內容寫入檔案成功
乙個except子句可以同時處理多個異常,這些異常將被放在乙個括號裡面成為乙個元組。
try
: s =1+
'1'int
("abc"
) f =
open
('test.txt'
)print
(f.read())
f.close(
)except
(oserror, typeerror, valueerror)
as error:
print
('出錯了!\n原因是:'
+str
(error)
)# 出錯了!
# 原因是:unsupported operand type(s) for +: 'int' and 'str'
不管try子句裡面有沒有發生異常,finally子句都會被執行。
如果乙個異常在try子句裡被丟擲,而又沒有任何的except對應把它截住,那麼這個異常會在finally子句執行後被丟擲。
try
: 檢測範圍
except exception[
as reason]
: 出現異常後的處理**
finally:
無論如何都會執行的**
【例子】
def
divide
(x, y)
:try
: result = x / y
print
("result is"
, result)
except zerodivisionerror:
print
("division by zero!"
)finally
:print
("executing finally clause"
)# 【互動輸出】
divide(2,
1)# result is 2.0
# executing finally clause
divide(2,
0)# division by zero!
# executing finally clause
divide(
"2",
"1")
# executing finally clause
# typeerror: unsupported operand type(s) for /: 'str' and 'str'
python使用raise語句丟擲乙個指定的異常。
【例子】
try
:raise nameerror(
'hithere'
)except nameerror:
print
('an exception flew by'
)# 【輸出】
# an exception flew by!
【題目描述】電腦產生乙個零到100之間的隨機數字,然後讓使用者來猜,如果使用者猜的數字比這個數字大,提示太大,否則提示太小,當使用者正好猜中電腦會提示,「恭喜你猜到了這個數是…」。在使用者每次猜測之前程式會輸出使用者是第幾次猜測,如果使用者輸入的根本不是乙個數字,程式會告訴使用者"輸入無效"。
要求:嘗試使用try catch異常處理結構對輸入情況進行處理; 獲取隨機數採用random模組。
3 異常處理
題目描述 電腦產生乙個零到100之間的隨機數字,然後讓使用者來猜,如果使用者猜的數字比這個數字大,提示太大,否則提示太小,當使用者正好猜中電腦會提示,恭喜你猜到了這個數是 在使用者每次猜測之前程式會輸出使用者是第幾次猜測,如果使用者輸入的根本不是乙個數字,程式會告訴使用者 輸入無效 嘗試使用try ...
python 異常處理3
def set age age if age 0 or age 200 print 值錯誤 raise valueerror 值錯誤 else print 給張三的年齡設定為 age try set age 18 except exception as e print x e 什麼時候應該向外界丟擲...
Python3 異常處理
python3.5 異常處理 try用法 try except語句主要是用於處理程式正常執行過程中出現的一些異常情況 try finally語句則主要用於在無論是否發生異常情況,都需要執行一些清理工作的場合 完整語句中,else語句的存在必須以except x或者except語句為前提,也就是說el...