2026 資訊之芽 Python 語法班 小作業
File I/O & Error Handling
重要資訊
Deadline: 2026/05/04 00:00
作業程式連結:
作業繳交表單:
簡介
在本次作業中,我們會練習:
- 簡易 command line 使用
- 閱讀、理解他人撰寫好的程式碼
- 更深入了解檔案、檔案系統的概念,與 Python File I/O
- 實際撰寫 Error Handling 的程式
完成作業後,你需要透過表單繳交:
- 完成 Error Handling 的程式
.py檔
預計需要 1~2 小時,理解題目設定、模板程式碼。
預計需要 1 小時,加入 Error Handling 的程式,並完成所有的繳交工作。
教學
回顧
假設你的當前工作目錄是 C:\Users\yourname 而你將程式碼 main.py 存放在 C:\Users\yourname\Downloads\homework 資料夾下。
你需要:
cd Downloads\homework
python main.py
或者是:
python C:\Users\yourname\main.py
才能正確執行。
帶參數執行程式
在 CLI 執行程式時,可以在 CLI 附帶參數,在程式中讀到參數。
舉例而言,如果透過以下 command 執行:
python main.py haha 123
Python 程式中可以用:
import sys
print(sys.argv[0]) # main.py
print(sys.argv[1]) # "haha"
print(sys.argv[2]) # "123"
來使用這些參數。
任務、執行、測試
環境準備
請分別從這幾個連結獲取作業程式碼。
convert.py(主要作業程式)grade.py(評分程式)input.txt(範例輸入資料)
其中,本次作業的主要修改目標是 convert.py。你需要在這個檔案中加入 Error Handling 的程式,使程式能正確處理各種錯誤輸入。
grade.py 是用來評量你的程式是否正確運作的程式,你可以用它來驗證你的程式是否符合要求。你不需要修改它。
動機
真人真事改編
你是資訊之芽 Python 語法班課程的小助手,需要幫忙批改 200 位學生的程式設計作業。
收到大家的程式作業後,你使用前一任小助手留下的自動化腳本為學生進行評分。腳本將學生的姓名、成績、繳交時間輸出成一筆一筆紀錄,到一個文字日誌檔內,格式如下:
name=Alice, score=80, timestamp=2026-04-10 13:45
name=Bob, score=35, timestamp=2026-03-31 00:32
...
在取得這份日誌檔案後,你想要進一步對這些資料進行加工。
你希望用程式自動化計算學生的遲交扣分,並且將最終結果匯出成表格,方便老師閱讀。
在與 Gemini 大戰 300 回合後,你得到了另你滿意的 Python 程式 convert.py。
你開心的向其他小助手炫耀,其他小助手便友善的說:「既然你有自動化腳本,那我們的日誌檔都交給你處理吧!」
而你實際將 convert.py 用來處理其他小助手的日誌檔後,頓感大事不妙。因為某些特殊的原因,其他小助手的日誌檔:
- 有部份紀錄可能缺少姓名、缺少成績、缺少繳交時間戳記
- 古老的評分腳本 bug 造成學生可能獲得不合理的成績
- ...
你在執行 convert.py 幫忙處理資料時,被迫需要一直停下來人工檢查發生了什麼錯誤,相當困擾。
針對這樣的情況,你想要改善 convert.py,讓它在面對各種非預期的情況時,都能妥善地完成任務。
任務
1. 閱讀 convert.py
請閱讀 convert.py,了解這份 python 程式是如何運作的。
2. 加入 Error Handling
在假設 .read()、.write() 系列的程式不會出錯的情況下,幫 convert.py 加上 Error Handling 的程式。
你的 convert.py 必須至少處理以下幾種類型的錯誤:
a. 檔案相關錯誤
- input 檔案不存在
- input 路徑是資料夾
- output 路徑是資料夾
- output 的資料夾不存在
處理方式:
- 程式必須直接結束,使用
sys.exit(52) - exit code 必須為
52
b. deadline 錯誤
- 格式錯誤
- 無法被 datetime 正確解析
處理方式:
- 程式必須直接結束,使用
sys.exit(52) - exit code 必須為
52
c. 欄位為空
- name 為空
- score 為空
- timestamp 為空
處理方式 (優先級由前往後):
- name 為空 -> 跳過這一筆紀錄
- score 為空 -> 表格中的所有成績欄位變為
X - timestamp 為空 -> 表格中的最終成績欄位變為
X
d. score 錯誤
- 不是數字 (例如 abc)
- 超出範圍 (小於 0 或大於 100)
處理方式:
- 表格中的所有成績欄位變為
X
e. timestamp 錯誤
- 格式錯誤
- 無法被 datetime 正確解析
處理方式:
- 表格中的最終成績欄位變為
X
f. 整行格式錯誤
- 無法被正確解析成 name / score / timestamp
處理方式:
- 跳過這一筆紀錄
執行
在 CLI 執行:
python convert.py input.txt output.txt "2026-04-04 12:00"
參數說明:
input.txt-> 輸入日誌檔案output.txt-> 輸出表格檔案deadline-> 截止時間
測試
做完後可以使用測試程式檢查你的實作,通過即可獲得滿分:
python grade.py convert.py
如果你的程式實做正確,會看到兩個 PASS。
繳交
請將修改好的 convert.py 透過這個 表單 進行繳交。