症狀總是一樣
在家裡執行腳本,沒有任何報錯,卻什麼事也沒發生。通知機器人很安靜,晚間整理流程只留下空白結果。原因每次都相同:在 Windows 裝置上開發時,把資料夾位置原封不動寫進了程式碼。
我們的環境
裝置共有三台:磁碟代號各不相同的兩台 Windows 裝置,加上一台 Mac mini。在一處運作良好的腳本,到了另一處卻盯著一個根本不存在的資料夾。偏偏它沒有任何例外就正常結束,連稱它失敗都顯得牽強。同樣的事故就這樣重複了四次。
Before
• 資料夾路徑直接寫在程式碼裡
• 換一台裝置執行,就讀到空資料夾並悄悄結束
• 出事時只能逐個檔案修補,修完就算了
After
我們寫了一個共用模組,從腳本自身所在位置推算基準資料夾,所有腳本都只引用它。
from pathlib import Path
BASE = Path(__file__).resolve().parent.parent
def repo(name):
return BASE / name
裝置換了也沒關係,因為一律以腳本所在位置為準,磁碟代號不再重要。真正必要的例外,則用一行註解標示豁免。
同時加上監控
每次同步時,一支小型檢查腳本會統計還殘留幾行寫死的路徑並回報。數字減少代表整理有進展,數字增加就是有新的寫死路徑混進來的警報。
學到的事
1. 與其訂下「不可以這樣寫」的規則,不如讓工具用數字替你計算,效果更持久。
2. 沒有報錯就結束的失敗,代價最高。
3. 例外不要藏起來,要標示出來讓大家看得見。
修改的只是幾行程式碼,真正改變的是一份安心:不管在哪台裝置執行,結果都一樣。