一、文件的基本操作

1. 打開文件:open()

file = open('example.txt', 'r')  # 以只讀模式打開

常用模式:

  • 'r':只讀(默認),文件必須存在
  • 'w':寫入,會清空原文件,若不存在則創建
  • 'a':追加,在文件末尾添加內容
  • 'r+':讀寫(不創建,不截斷)
  • 'b':二進制模式(如 'rb', 'wb'

2. 讀取文件內容

# 方法1:讀取全部內容
with open('example.txt', 'r', encoding='utf-8') as f:
    content = f.read()
    print(content)

# 方法2:按行讀取
with open('example.txt', 'r', encoding='utf-8') as f:
    for line in f:
        print(line.strip())  # strip() 去掉換行符

✅ 強烈建議使用 with open(...) as f: 語法!它會在代碼塊結束時自動關閉文件,即使發生錯誤也不會泄露資源。

3. 寫入文件

# 覆蓋寫入
with open('output.txt', 'w', encoding='utf-8') as f:
    f.write("Hello, Python!\n")
    f.write("This is a new line.")

# 追加寫入
with open('log.txt', 'a', encoding='utf-8') as f:
    f.write("2026-01-07: User logged in.\n")

4. 處理二進制文件(如圖片、音頻)

# 複製一張圖片
with open('photo.jpg', 'rb') as src:
    with open('photo_copy.jpg', 'wb') as dst:
        dst.write(src.read())

二、異常處理:讓程序更健壯

當程序遇到錯誤(如文件不存在、除零、類型錯誤),Python 會拋出 異常(Exception)。如果不處理,程序會崩潰。

1. 基本結構:try...except

try:
    with open('not_exist.txt', 'r') as f:
        print(f.read())
except FileNotFoundError:
    print("❌ 文件未找到,請檢查路徑!")

2. 捕獲多種異常

try:
    num = int(input("請輸入一個數字: "))
    result = 10 / num
    print("結果:", result)
except ValueError:
    print("輸入的不是有效數字!")
except ZeroDivisionError:
    print("不能除以零!")

3. 捕獲所有異常(謹慎使用)

try:
    # 可能出錯的代碼
    risky_operation()
except Exception as e:
    print("發生未知錯誤:", e)

⚠️ 不推薦直接 except:(不指定類型),會隱藏編程錯誤!

4. elsefinally

  • else:沒有異常時執行
  • finally:無論是否異常,都會執行(常用於清理)
try:
    f = open('data.txt', 'r')
    data = f.read()
except FileNotFoundError:
    print("文件不存在")
else:
    print("讀取成功:", data[:50])
finally:
    if 'f' in locals():
        f.close()  # 實際上用 with 更安全,這裏僅作演示

三、主動拋出異常:raise

你也可以在自己的代碼中主動觸發異常:

def divide(a, b):
    if b == 0:
        raise ValueError("除數不能為零!")
    return a / b

try:
    print(divide(10, 0))
except ValueError as e:
    print("自定義錯誤:", e)

四、常見異常類型速查

異常類型

説明

FileNotFoundError

文件未找到

ValueError

值類型正確但值不合適(如 int("abc")

TypeError

類型錯誤(如 "hello" + 5

ZeroDivisionError

除零錯誤

KeyError

字典鍵不存在

IndexError

列表索引越界