Python中try?except語句及實(shí)際應(yīng)用詳細(xì)解釋
前言
在 Python 中,try
和 except
是用于異常處理的關(guān)鍵字,它們可以捕獲程序在運(yùn)行過程中可能出現(xiàn)的錯(cuò)誤(即異常),從而避免程序崩潰或非預(yù)期的行為。
使用 try-except
語句可以讓程序在遇到錯(cuò)誤時(shí)優(yōu)雅地處理,而不是直接拋出錯(cuò)誤并中斷執(zhí)行。
try-except 的基本語法
try: # 嘗試執(zhí)行的代碼塊 # 可能會引發(fā)異常的代碼 except ExceptionType: # 發(fā)生指定異常時(shí)執(zhí)行的代碼塊 # 處理異常的邏輯
1. try 語句
try
語句用來包裹那些可能會引發(fā)異常的代碼塊。Python 會嘗試執(zhí)行 try
塊中的所有語句。
如果 try
塊中的代碼正常執(zhí)行沒有錯(cuò)誤,就會跳過 except
塊,繼續(xù)執(zhí)行后面的代碼。
2. except 語句
except
語句定義了當(dāng) try
塊中的代碼拋出異常時(shí),應(yīng)該如何處理這些異常。
except
后面可以指定捕獲的異常類型,比如 ZeroDivisionError
、ValueError
等,或者使用通用的 Exception
來捕獲所有類型的異常。
捕獲特定類型的異常
try: result = 10 / 0 # 會引發(fā) ZeroDivisionError except ZeroDivisionError: print("除以零錯(cuò)誤")
捕獲所有異常
try: # 可能出錯(cuò)的代碼 result = 10 / 0 except Exception as e: # 捕獲所有異常,并將其賦值給 e print(f"發(fā)生了錯(cuò)誤: {e}")
在上面的例子中,Exception as e
捕獲所有異常并將其存儲在 e
變量中。然后,我們可以輸出異常的具體信息。
3. else 和 finally
除了 try
和 except
,Python 的異常處理機(jī)制還提供了 else
和 finally
語句,這些語句可以用來處理不同的情境。
else
語句:如果try
塊中的代碼沒有拋出異常,那么會執(zhí)行else
塊中的代碼。else
語句通常用于執(zhí)行那些只有在沒有異常時(shí)才應(yīng)該執(zhí)行的代碼。finally
語句:無論是否發(fā)生異常,finally
塊中的代碼總是會被執(zhí)行。通常用來執(zhí)行清理操作,例如關(guān)閉文件或釋放資源。
示例
try: result = 10 / 2 # 沒有錯(cuò)誤 except ZeroDivisionError: print("除以零錯(cuò)誤") else: print("沒有發(fā)生異常,計(jì)算結(jié)果:", result) finally: print("這是最終執(zhí)行的部分,無論發(fā)生錯(cuò)誤與否")
輸出:
沒有發(fā)生異常,計(jì)算結(jié)果: 5.0
這是最終執(zhí)行的部分,無論發(fā)生錯(cuò)誤與否
沒有發(fā)生異常,計(jì)算結(jié)果: 5.0 這是最終執(zhí)行的部分,無論發(fā)生錯(cuò)誤與否
4. 捕獲多個(gè)異常
一個(gè) try
塊可以包含多個(gè) except
塊,分別用于捕獲不同類型的異常。當(dāng)多個(gè)異??赡馨l(fā)生時(shí),可以根據(jù)不同的異常類型提供不同的處理方式。
try: num = int(input("請輸入一個(gè)數(shù)字: ")) result = 10 / num except ValueError: print("請輸入一個(gè)有效的數(shù)字") except ZeroDivisionError: print("除以零錯(cuò)誤")
在這個(gè)例子中,程序會根據(jù)用戶輸入的內(nèi)容判斷是 ValueError
還是 ZeroDivisionError
,然后給出相應(yīng)的錯(cuò)誤提示。
5. try-except 的實(shí)際應(yīng)用場景
try-except
語句在許多實(shí)際應(yīng)用中非常有用,尤其是在以下幾種場景:
- 文件操作:打開文件時(shí),文件可能不存在或沒有權(quán)限讀取。
- 網(wǎng)絡(luò)請求:網(wǎng)絡(luò)連接可能失敗或請求超時(shí)。
- 用戶輸入:用戶輸入的內(nèi)容可能無法轉(zhuǎn)換為期望的類型(如數(shù)字)。
- 外部庫的函數(shù)調(diào)用:調(diào)用外部庫時(shí),可能會遇到未預(yù)見的異常。
示例:文件操作
try: with open("file.txt", "r") as f: content = f.read() except FileNotFoundError: print("文件未找到,請檢查路徑") except PermissionError: print("權(quán)限錯(cuò)誤,請檢查文件的權(quán)限")
6. try-except 中的 else 和 finally
在某些情況下,我們希望在沒有異常時(shí)執(zhí)行某些代碼,并且在最終清理資源時(shí)執(zhí)行另一些代碼。
示例:數(shù)據(jù)庫操作
try: # 假設(shè)連接到數(shù)據(jù)庫并執(zhí)行查詢 connection = open_database_connection() result = query_database(connection) except DatabaseError as e: print(f"數(shù)據(jù)庫錯(cuò)誤: {e}") else: print("查詢成功") finally: connection.close() # 無論是否有異常,都需要關(guān)閉數(shù)據(jù)庫連接
7. try-except 中的 else 和 finally 用法總結(jié)
try
: 執(zhí)行可能出錯(cuò)的代碼except
: 捕獲并處理異常else
: 如果沒有異常發(fā)生,執(zhí)行else
中的代碼finally
: 無論是否發(fā)生異常,都會執(zhí)行的代碼(通常用于清理工作)
8. 總結(jié)
try-except
是 Python 中非常強(qiáng)大的異常處理機(jī)制,可以幫助程序在面對錯(cuò)誤時(shí)進(jìn)行優(yōu)雅的處理。
通過捕獲特定的異常類型,我們能夠控制錯(cuò)誤的處理方式,使程序在面對意外情況時(shí)不會直接崩潰。結(jié)合 else
和 finally
,我們可以確保代碼的正確性和資源的清理。
在實(shí)際開發(fā)中,合理使用 try-except
語句能夠提高代碼的魯棒性,避免程序因某個(gè)小錯(cuò)誤而終止,從而提升用戶體驗(yàn)。
到此這篇關(guān)于Python中try except語句及實(shí)際應(yīng)用的文章就介紹到這了,更多相關(guān)Python try except詳解內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python 通過 socket 發(fā)送文件的實(shí)例代碼
這篇文章主要介紹了python 通過 socket 發(fā)送文件的實(shí)例代碼,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-08-08python2和python3在處理字符串上的區(qū)別詳解
這篇文章主要介紹了python2和python3在處理字符串上的區(qū)別詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05Python實(shí)現(xiàn)像awk一樣分割字符串
這篇文章主要介紹了Python實(shí)現(xiàn)像awk一樣分割字符串,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09淺談Django QuerySet對象(模型.objects)的常用方法
這篇文章主要介紹了淺談Django QuerySet對象(模型.objects)的常用方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-03-03python在TXT文件中按照某一字符串取出該字符串所在的行方法
今天小編就為大家分享一篇python在TXT文件中按照某一字符串取出該字符串所在的行方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-12-12python簡單實(shí)現(xiàn)整數(shù)反轉(zhuǎn)的畫解算法
這篇文章主要介紹了python簡單實(shí)現(xiàn)整數(shù)反轉(zhuǎn)采用了一個(gè)有趣的畫解算法,通過示例的題目描述來對問題分析進(jìn)行方案的解決,有需要的朋友可以參考下2021-08-08Python functools模塊學(xué)習(xí)總結(jié)
這篇文章主要介紹了Python functools模塊學(xué)習(xí)總結(jié),本文講解了functools.partial、functool.update_wrapper、functool.wraps、functools.reduce、functools.cmp_to_key、functools.total_ordering等方法的使用實(shí)例,需要的朋友可以參考下2015-05-05