Python基礎 Task03 異常處理

2021-10-08 10:15:12 字數 4424 閱讀 3397

異常就是執行期檢測到的錯誤。計算機語言針對可能出現的錯誤定義了異常型別,某種錯誤引發對應的異常時,異常處理程式將被啟動,從而恢復程式的正常執行。

異常體系內部有層次關係,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,但由於keyerrorlookuperror的子類,且將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...