🔧Python 自動化報表腳本常見錯誤解析:意外縮排與時間格式問題全解

 

🧠 前言:當自動化報表「突然罷工」

在企業內部報表系統中,許多工程師會使用 Python 腳本自動匯出報表。這種腳本能在固定週期(例如每週三、每月五號)自動執行資料庫查詢、過濾欄位並輸出 CSV 或 PDF。

但對初學者而言,最常見的問題不是邏輯錯,而是──
👉 縮排(indentation)與時間格式(datetime)錯誤

這篇文章將用淺顯的方式,教你如何辨識並修正這兩種經典錯誤。


💥 錯誤一:TypeError「str + datetime」

🧩 問題現象

執行時出現訊息:

TypeError: unsupported operand type(s) for +: 'str' and 'datetime'

這代表程式試圖把「文字」和「時間物件」直接相加,例如:

sql = "WHERE date > " + datetime.now()

Python 不允許把時間直接和字串串起來。

✅ 正確做法

要先把時間轉成文字格式(string),例如:

from datetime import datetime today = datetime.now().strftime("%Y-%m-%d") # 轉為字串格式:2025-11-07 sql = "WHERE date > '" + today + "'"

這樣 SQL 查詢語句就會正確輸出:

WHERE date > '2025-11-07'

⚠️ 錯誤二:SyntaxError「unexpected indent」

🧩 問題現象

當 Python 說:

SyntaxError: unexpected indent

意思是:縮排層級錯亂
Python 是靠「縮排」判斷程式區塊的,如果多一格空白、或混用 Tab 與空白,都會報錯。

💡 常見原因

  1. 不小心在檔案開頭多按了一下空白。

  2. iffor 等區塊結束後,下一行沒有完全對齊最左邊。

  3. 貼上別人程式碼時,混用了 Tab 和空白。

✅ 解決方法

  • 確保整份程式統一用「空白」縮排(通常 4 格)。

  • 不要在檔案最上方或最下方留下空白行。

  • iffor 區塊結束後的下一行,要回到最左邊:

錯誤示範:

if today == 3: print("週報") print("輸出完成") print("再見") print("多縮了一格") # ← 多餘縮排

正確寫法:

if today == 3: print("週報") print("輸出完成") print("再見") # ← 對齊最左邊

🧾 延伸:安全組合檔案路徑與字串

在自動化報表中,很多人會直接用:

path = "C:\exportReport\AutoReport\week\" + folder

但這樣會觸發跳脫字元錯誤(\e, \A 等)。

更穩定的寫法是:

import os path = os.path.join("C:\\exportReport", "AutoReport", "week", folder)

或使用 Python 的 raw string:

path = r"C:\exportReport\AutoReport\week\{}".format(folder)

🚀 最佳實踐:封裝成函式

讓主程式乾淨、結構明確:

from datetime import datetime, timedelta import os def export_report(report_type): today = datetime.now() folder = today.strftime("%Y-%m-%d") base = os.path.join("C:\\exportReport", "AutoReport", report_type, folder) os.makedirs(base, exist_ok=True) print("報表目錄建立完成:", base) if datetime.today().weekday() == 2: export_report("week") if datetime.today().day == 5: export_report("month")

這樣每個分支的縮排就單純明瞭,也不容易出現「unexpected indent」。


🔍 總結:初學者最該記住的三件事

  1. 縮排就是語法的一部分,別讓多一格空白毀了整支程式。

  2. 時間要先格式化成字串再使用,尤其在 SQL 或檔名中。

  3. 盡量封裝功能,讓程式層級清晰、可維護。


📘 延伸閱讀


✍️ 結語

在自動化開發的世界裡,錯誤訊息不是敵人,而是導師。
每一個「SyntaxError」或「TypeError」,都是 Python 提醒你:「語法邏輯沒錯,但細節需要更精準」。
理解這些原理後,你就能讓每一次報表自動化,穩定、準確又高效。

留言

這個網誌中的熱門文章

🔍Vue.js 專案錯誤排查:解決 numericFields is not defined 與合併儲存格邏輯最佳化

🔎EF Core 連 Oracle 出現 ORA-00600 [kpp_concatq:2] 的完整排錯指南(含 EF Core ToString/CultureInfo 錯誤)

🛠【ASP.NET Core + Oracle】解決 ORA-00904 "FALSE": 無效的 ID 錯誤與資料欄位動態插入顯示問題