File I/O & Exception Handling
# 讀取整個檔案
with open("data.txt", "r", encoding="utf-8") as f:
content = f.read()
print(content)
# 逐行讀取
with open("data.txt", "r", encoding="utf-8") as f:
for line in f:
print(line.strip()) # strip() 去掉換行符號
# 讀成清單(每行一個元素)
with open("data.txt", "r", encoding="utf-8") as f:
lines = f.readlines()
with open(...) as f: 會在結束後自動關閉檔案,不需要手動 f.close()。
# 寫入(覆蓋已有內容)
with open("output.txt", "w", encoding="utf-8") as f:
f.write("第一行\n")
f.write("第二行\n")
# 追加(不覆蓋,在末尾加入)
with open("output.txt", "a", encoding="utf-8") as f:
f.write("第三行\n")
| 模式 | 說明 |
|---|---|
"r" | 讀取(檔案必須存在) |
"w" | 寫入(覆蓋,檔案不存在則建立) |
"a" | 追加(在末尾加入) |
"r+" | 讀寫(檔案必須存在) |
JSON 是最常用的資料交換格式(dict ↔ JSON):
import json
# 寫入 JSON
data = {"name": "Ian", "scores": [95, 82, 78]}
with open("data.json", "w", encoding="utf-8") as f:
json.dump(data, f, ensure_ascii=False, indent=2)
# 讀取 JSON
with open("data.json", "r", encoding="utf-8") as f:
loaded = json.load(f)
print(loaded["name"]) # Ian
print(loaded["scores"]) # [95, 82, 78]
程式執行時發生錯誤,Python 會「丟出例外」:
# 這些都會造成錯誤:
int("abc") # ValueError
10 / 0 # ZeroDivisionError
x = [1, 2, 3]
x[10] # IndexError
{"a": 1}["b"] # KeyError
open("不存在.txt") # FileNotFoundError
沒有處理的話,程式會直接中斷。
try / excepttry:
num = int(input("輸入一個數字:"))
print(f"你輸入了 {num}")
except ValueError:
print("錯誤!請輸入數字,不能輸入文字。")
# 多個 except
try:
result = 10 / int(input("除以:"))
print(result)
except ZeroDivisionError:
print("不能除以零!")
except ValueError:
print("請輸入數字!")
except Exception as e:
print(f"發生未知錯誤:{e}")
finally 與 elsetry:
f = open("data.txt", "r")
content = f.read()
except FileNotFoundError:
print("檔案不存在")
else:
# 沒有例外時執行
print(f"讀取成功,{len(content)} 個字元")
finally:
# 不管有沒有例外,一定執行
print("程式結束")
f.close() # 確保檔案被關閉
try:嘗試執行 | except:出錯時處理
else:成功時執行 | finally:無論如何都執行
# 安全讀取數字並計算
def safe_divide():
try:
a = float(input("輸入被除數:"))
b = float(input("輸入除數:"))
result = a / b
except ValueError:
print("請輸入有效數字!")
except ZeroDivisionError:
print("除數不能為零!")
else:
print(f"{a} ÷ {b} = {result:.2f}")
finally:
print("計算結束")
# 把結果存到檔案
safe_divide()
學會了檔案讀寫、JSON 處理與 try/except 例外處理。