異常就是執行期檢測到的錯誤。計算機語言針對可能出現的錯誤定義了異常型別,某種錯誤引發對應的異常時,異常處理程式將被啟動,從而恢復程式的正常執行。
異常體系內部有層次關係,python異常體系中的部分關係如下所示:
檢測範圍
except exception[as reason]:
出現異常後的處理**
try 語句按照如下方式工作:
【例子】
try:【例子】f = open('test.txt')
print(f.read())
f.close()
except oserror:
print('開啟檔案出錯')
# 開啟檔案出錯
try:乙個f = open('test.txt')
print(f.read())
f.close()
except oserror as error:
print('開啟檔案出錯\n原因是:' + str(error))
# 開啟檔案出錯
# 原因是:[errno 2] no such file or directory: 'test.txt'
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
**塊時,必須堅持對其規範排序,要從最具針對性的異常到最通用的異常。
【例子】
dict1 =【例子】乙個try:
x = dict1['y']
except keyerror:
print('鍵錯誤')
except lookuperror:
print('查詢錯誤')
else:
print(x)
# 鍵錯誤
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:不管檢測範圍
except exception[as reason]:
出現異常後的處理**
finally:
無論如何都會被執行的**
try
子句裡面有沒有發生異常,finally
子句都會執行。
如果乙個異常在try
子句裡被丟擲,而又沒有任何的except
把它截住,那麼這個異常會在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'
try
子句執行時沒有發生異常,python將執行else
語句後的語句。
try:使用檢測範圍
except:
出現異常後的處理**
else:
如果沒有異常執行這塊**
except
而不帶任何異常型別,這不是乙個很好的方式,我們不能通過該程式識別出具體的異常資訊,因為它捕獲所有的異常。
try:【例子】檢測範圍
except(exception1[, exception2[,...exceptionn]]]):
發生以上多個異常中的乙個,執行這塊**
else:
如果沒有異常執行這塊**
try:注意:fh = open("testfile", "w")
fh.write("這是乙個測試檔案,用於測試異常!!")
except ioerror:
print("error: 沒有找到檔案或讀取檔案失敗")
else:
print("內容寫入檔案成功")
fh.close()
# 內容寫入檔案成功
else
語句的存在必須以except
語句的存在為前提,在沒有except
語句的try
語句中使用else
語句,會引發語法錯誤。
python 使用raise
語句丟擲乙個指定的異常。
【例子】
try:練習題:raise nameerror('hithere')
except nameerror:
print('an exception flew by!')
# an exception flew by!
1、猜數字遊戲
題目描述:
電腦產生乙個零到100之間的隨機數字,然後讓使用者來猜,如果使用者猜的數字比這個數字大,提示太大,否則提示太小,當使用者正好猜中電腦會提示,"恭喜你猜到了這個數是......"。在使用者每次猜測之前程式會輸出使用者是第幾次猜測,如果使用者輸入的根本不是乙個數字,程式會告訴使用者"輸入無效"。
(嘗試使用try catch異常處理結構對輸入情況進行處理)
獲取隨機數採用random模組。
爬蟲task03心得
通過這一階段的學習,我知道了爬蟲中針對ip被封的解決方案,主要有三種小套路 1,修改請求頭,模擬瀏覽器 而不是 去直接訪問 去訪問 2,採用 ip並輪換 3,設定訪問時間間隔 下面是獲取ip位址的案例 from bs4 import beautifulsoup import requests imp...
Task03異常處理
猜數字遊戲 題目描述 電腦產生乙個零到100之間的隨機數字,然後讓使用者來猜,如果使用者猜的數字比這個數字大,提示太大,否則提示太小,當使用者正好猜中電腦會提示,恭喜你猜到了這個數是 在使用者每次猜測之前程式會輸出使用者是第幾次猜測,如果使用者輸入的根本不是乙個數字,程式會告訴使用者 輸入無效 嘗試...
Task 03 異常處理
異常就是執行期檢測到的錯誤。計算機語言針對可能出現的錯誤定義了異常型別,某種錯誤引發對應的異常時,異常處理程式將被啟動,從而恢復程式的正常執行。1.python 標準異常總結 2.python標準警告總結 3.try except 語句 try 語句按照如下方式工作 首先,執行try子句 在關鍵字t...