【Lemon】異常處理

目錄

 

異常捕獲

捕獲指定類型的異常

可以定義變量來接收異常

捕獲多個異常

捕獲不確定的異常

else場景應用

finally應用場景

raise主動拋出異常

assert斷言


異常捕獲

對於有可能會出錯的代碼, 我們可以對這行代碼進行異常捕獲。

try-except

try-except-else

try-except-else-finally

try-except-finally

 

示例:

try:

    a = int(input('請輸入一個數字:'))

except:

    print('出錯啦!(try裏面的代碼出現了異常執行except中的代碼)')

else:

    print('try裏面的代碼沒有出現異常的時候執行else中的代碼')

finally:

    print('不管代碼是否出現異常,都會執行!')

 

捕獲指定類型的異常

示例:

try:

    a = int(input('請輸入一個數字:'))

    print(b)

except NameError: # 指定異常纔會被捕獲。出現其他異常還是會報錯。

    print('出錯啦!(出現NameError會打印)')

 

可以定義變量來接收異常

示例:

try:

    a = int(input('請輸入一個數字:'))

    print(b)

except NameError as e:

    print('當前出錯的原因:', e)  # 輸出結果:name 'b' is not defined

    print('出錯啦!(出現NameError會打印)')

 

捕獲多個異常

示例:

# 方法一:使用多個except(不同的異常類型,可以做不同的處理)

try:

    a = int(input('請輸入一個數字:'))

    print(b)

except NameError as e:

    print('當前出錯的原因:', e)

    print('出錯啦!(出現NameError會打印)')

except ValueError as e2:

    print('當前出錯的原因:', e2)

    print('出錯啦!(出現ValueError會打印)')





# 方式二:一個except(不同異常做相同處理)

try:

    a = int(input('請輸入一個數字:'))

    print(b)

except (NameError, ValueError) as e:

    print('當前出錯的原因:', e)

    print('出錯啦!(出現NameError, ValueError會打印)')



# 注意:上述代碼中,try的第一行代碼出現異常,try中的第二行代碼就不會執行了

 

捕獲不確定的異常

捕獲不確定的異常, 可以直接捕獲常見異常類型的父類

示例:

try:

    import requests

    requests.ger(url='www.baidu.com')

except Exception as e:

    print('出錯的原因:', e)

 

else場景應用

示例:

import os

# 複製指定路徑下的文件到當前文件所在的目錄

def file_copy(path):

    try:

        file_list = os.listdir(path)

    except FileNotFoundError as e:

        print('你傳入的路徑不對,出現了錯誤,錯誤提示{}'.format(e))

    # 獲取文件路徑沒有出錯才執行以下代碼

    else:

        for file in file_list:

            # 定位目標目錄的文件

            file_path = os.path.join(path, file)



            # 如果是文件,則進行文件複製

            if os.path.isfile(file_path):

                # 讀取文件的內容

                with open(file_path, 'rb') as f:

                    content = f.read()



                # 將上面讀取到的內容寫入到新文件中, 新文件跟當前文件同級,並且命名帶有cp

                # with open(os.path.join(os.getcwd(), 'cp' + file), 'wb') as f:

                with open('cp' + file, 'wb') as f:

                    f.write(content)



file_copy('path')

 

finally應用場景

示例:

# 通過finally來關閉文件

f = open('case.txt', 'w', encoding='utf-8')

try:

    n= input('請輸入數字:')

except:

    f.write('代碼錯誤了!')

else:

    f.write('代碼沒有錯誤了!')

finally:

    print('finally執行了!')

    f.close()

 

raise主動拋出異常

示例:

print('-----------------------')

# raise ValueError('這個自定的錯誤提示')

raise AssertionError

print('-----------------------')

 

assert斷言

示例:

excepted = '用例執行通過'

result = '用例執行未通過'

assert excepted == result # 不相等,會拋出異常AssertionError
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章