前篇文章末尾有簡單介紹 Python 的例外處理 (Exception Handling),我沒有打算深入說明 Python 的 try, except, else 和 finally 語法,但要從「編碼風格」角度 來看待 C 和 Python 如何處理可能錯誤或異常情況。
編碼風格的對抗
學習新的知識時,從書本後面的術語表 (glossary),可以快速瀏覽這些重要詞彙,找出沒有學到或是有興趣的知識點。
在Python術語表內有談論到 EAFP 和 LBYL 的編碼風格。
以下舉例來比較這兩原則:
C LBYL 編碼風格:
#include <stdio.h>
int main() {
int num;
printf("請輸入一個整數:");
if (scanf("%d", &num) == 1) { // scanf函數返回值為 1,表示整數成功轉換
if (num != 0) {
float result = 100.0 / num;
printf("結果:%f\n", result);
} else {
printf("不能除以零\n");
}
} else {
printf("無效的輸入\n");
}
return 0;
}
Python EAFP 編碼風格:
try:
num = int(input("請輸入一個整數:"))
result = 100 / num
except (ValueError, ZeroDivisionError):
print("無效的輸入或不能除以零")
else:
print(f"結果: {result}")
Python EAFP 原則是我喜歡的簡潔且快速的風格,因為它專注於「正常情況」。
但如果改成 LBYL 原則,就可以看到許多if
條件語句在 Python 程式碼內:
# 改用LBYL原則
input_str = input("請輸入一個整數:")
if input_str.isdigit():
num = int(input_str)
if num != 0:
result = 10 / num
print("結果:", result)
else:
print("不能除以零")
else:
print("無效的輸入")
編碼風格的結論:
Python術語表的傳送門