1. 程式人生 > 實用技巧 >Python基礎Task3:異常處理

Python基礎Task3:異常處理

Python基礎Task3:異常處理

1.try-except語句

try:
    檢測範圍
except Exception[as reason]:
    出現異常後的處理程式碼

【例子】

try:
    f = open('test.txt')
    print(f.read())
    f.close()
except OSError:
    print('開啟檔案出錯')

try 語句按照如下方式工作:

首先,執行try子句(在關鍵字try和關鍵字except之間的語句)
如果沒有異常發生,忽略except子句,try子句執行後結束。
如果在執行try子句的過程中發生了異常,那麼try子句餘下的部分將被忽略。如果異常的型別和except之後的名稱相符,那麼對應的except子句將被執行。最後執行try語句之後的程式碼。
如果一個異常沒有與任何的except匹配,那麼這個異常將會傳遞給上層的try中。
一個try語句可能包含多個except子句,分別來處理不同的特定的異常。最多隻有一個分支會被執行。
使用多個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'

2. try - except - finally 語句

try:
    檢測範圍
except Exception[as reason]:
    出現異常後的處理程式碼
finally:
    無論如何都會被執行的程式碼

如果一個異常在try子句裡被丟擲,而又沒有任何的except把它截住,那麼這個異常會在finally子句執行後被丟擲。

3.try - except - else 語句

如果在try子句執行時沒有發生異常,Python將執行else語句後的語句。

try:
    檢測範圍
except:
    出現異常後的處理程式碼
else:
    如果沒有異常執行這塊程式碼

注意:else語句的存在必須以except語句的存在為前提,在沒有except語句的try語句中使用else語句,會引發語法錯誤。

4.raise語句

Python 使用raise語句丟擲一個指定的異常。

【例子】

try:
    raise NameError('HiThere')
except NameError:
    print('An exception flew by!')
    
 #An exception flew by!

3.練習題:猜數字

題目描述:

電腦產生一個零到100之間的隨機數字,然後讓使用者來猜,如果使用者猜的數字比這個數字大,提示太大,否則提示太小,當用戶正好猜中電腦會提示,"恭喜你猜到了這個數是......"。在使用者每次猜測之前程式會輸出使用者是第幾次猜測,如果使用者輸入的根本不是一個數字,程式會告訴使用者"輸入無效"。

(嘗試使用try catch異常處理結構對輸入情況進行處理)

獲取隨機數採用random模組。

import random
count=1
x=random.randint(0,100)
print("猜測一個0到100之間的整數:\n")
while True:
    try:
        m = input("這是第%d次猜,請輸入一個整數:\n" % count)
        m1=int(m)
        if m1>x:
            print("太大")
            count +=1
            #continue

        elif m1<x:
            print("太小")
            count += 1
            #continue
        else:
            print("恭喜你猜對了!")
            count=1
            x=random.randint(0,100)
            print("猜測一個0到100之間的整數:\n")
    except ValueError as error:
        print("輸入的不是數字" + str(error))
        print("請輸入一個0到100之間的整數")