苦練Python第18天:Python異常處理錦囊
原文鏈接:https://dev.to/therahul_gupta/day-18100-exception-handling-with-try-except-in-python-3m5a
作者:Rahul Gupta
譯者:倔強青銅三
前言
大家好,我是倔強青銅三。是一名熱情的軟件工程師,我熱衷于分享和傳播IT技術,致力于通過我的知識和技能推動技術交流與創新,歡迎關注我,微信公眾號:倔強青銅三。歡迎點贊、收藏、關注,一鍵三連!!!
歡迎來到 100 天 Python 挑戰 的 第 18 天!
今天,我們將攻克 異常處理:讓程序在遭遇錯誤時不再崩潰,而是優雅地恢復并給出提示。
📦 今日收獲清單
- 異常是什么,如何產生
try
、except
、else
、finally
的用法- 多異常捕獲與自定義異常
- 實戰示例與最佳實踐
?? 異常是什么?
異常(Exception) 是 運行時錯誤,會打斷程序正常流程。
常見場景:
- 除零
- 訪問不存在的索引
- 類型轉換失敗
- 文件不存在
無保護代碼:
num = int(input("Enter a number: "))
print(10 / num)
用戶輸入 0
或字母,程序直接崩潰。
下面加上“安全網”。
? 基礎 try-except
try:num = int(input("Enter a number: "))result = 10 / numprint(result)
except ZeroDivisionError:print("You can't divide by zero!")
except ValueError:print("Please enter a valid number.")
運行示例:
- 輸入
0
→ “You can’t divide by zero!” - 輸入
abc
→ “Please enter a valid number.”
🎯 一網打盡?(謹慎使用)
try:risky_code()
except Exception as e:print("Something went wrong:", e)
適合記錄日志,但日常開發請盡量捕獲具體異常。
🧠 else
& finally
雙保險
else
:無異常時 執行finally
:無論如何 都執行,常用于清理資源
try:num = int(input("Enter number: "))result = 10 / num
except ZeroDivisionError:print("Can't divide by zero.")
else:print("Division successful:", result)
finally:print("This always runs.")
🔁 一次捕獲多種異常
try:numbers = [1, 2, 3]print(numbers[5]) # IndexError
except (IndexError, ValueError) as e:print("An error occurred:", e)
🚀 實戰:安全讀取用戶年齡
def get_age():try:age = int(input("Enter your age: "))print("You are", age, "years old.")except ValueError:print("Invalid age. Please enter a number.")get_age()
🧰 進階:自定義異常
定義業務專屬錯誤類型:
class AgeTooLowError(Exception):passdef check_age(age):if age < 18:raise AgeTooLowError("You must be at least 18.")
🧼 異常處理最佳實踐
- ? 捕獲具體異常,避免裸
except
- ? 使用
finally
釋放資源(如關閉文件) - ? 提供清晰、友好的錯誤提示
- 🚫 別把異常當流程控制工具
🧠 一日精華
- 異常是程序運行時的“意外”,需要被捕獲
try-except-else-finally
四劍客各有分工- 多異常、自定義異常讓錯誤處理更精準
- 寫出健壯、用戶友好的代碼,從異常處理開始
最后感謝閱讀!歡迎關注我,微信公眾號:
倔強青銅三
。歡迎點贊
、收藏
、關注
,一鍵三連!!!