← 返回大綱
第六章

檔案讀寫
與例外處理

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 語法

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

讀寫 JSON 檔案

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]
例外處理

什麼是例外 (Exception)?

程式執行時發生錯誤,Python 會「丟出例外」:

# 這些都會造成錯誤:
int("abc")      # ValueError
10 / 0          # ZeroDivisionError
x = [1, 2, 3]
x[10]           # IndexError
{"a": 1}["b"]   # KeyError
open("不存在.txt")  # FileNotFoundError

沒有處理的話,程式會直接中斷

例外處理

try / except

try:
    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}")
例外處理

finallyelse

try:
    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 例外處理。