科技 · 實用指南
Python 顯示「field larger than field limit」?提高上限前先診斷 CSV 記錄
先保全原始位元組,分離 Sniffer 與 reader,證明記錄是真正過寬、引號損壞或僅偵測失敗,再調整 csv.field_size_limit。

_csv.Error 是邊界訊號,不是根因。相同訊息可能是合法大欄位、未閉合引號吞入後續記錄,或 Sniffer 樣本先失敗。
保全位元組與解析契約,定位第一個失敗邏輯記錄,只做對應修復,並驗證資料語意與記憶體邊界。
1. 保全失敗位元組與解析契約
先複製原檔並記錄雜湊、大小、編碼、BOM、解析器及引擎,以 newline="" 開啟。
記錄 dialect 所有設定與目前 field_size_limit,測試後還原舊值。
2. 分開重現 reader 與 Sniffer
已知 dialect 時先略過 Sniffer,用明確設定解析相同位元組。
只有明確 dialect 成功且自動偵測失敗,才標記 Sniffer-only。
3. 定位首個失敗邏輯記錄
從新句柄串流讀取,記錄 reader.line_num 與候選附近的有限位元組偏移。
實體行不等於 CSV 記錄;檢查引號閉合與欄數漂移。
4. 分類寬度、引號吞併或偵測邊界
真正寬欄位需有平衡框架、穩定結構與符合契約的實測大小,再設定有依據的有限上限。
引號損壞就修復或拒絕來源;僅偵測失敗則提供 dialect 或完整記錄樣本。
5. 處理平台整數並證明修復
C 實作轉成平台 C long,溢位時降低候選值;sys.maxsize 不是通用安全設定。
核對列欄、值雜湊、內嵌符號、記憶體與上限還原,避免只看解析成功。
