diff --git a/deploy/profile-scripts/backfill_hk_stocks.py b/deploy/profile-scripts/backfill_hk_stocks.py index d7766bde..e8fe547e 100644 --- a/deploy/profile-scripts/backfill_hk_stocks.py +++ b/deploy/profile-scripts/backfill_hk_stocks.py @@ -57,16 +57,20 @@ def main(): continue new = 0 for b in bars: + # 健壮解析:只取前6字段(date,open,close,high,low,volume),且都须为数字 + # (腾讯港股部分 bar 末尾带 dict 附加字段,会导致 float() 报错) try: - date, open_, close, high, low = b[0], b[1], b[2], b[3], b[4] - volume = float(b[5]) if len(b) > 5 and b[5] not in (None, "") else 0 - amount = float(b[6]) if len(b) > 6 and b[6] not in (None, "") else 0 - except (IndexError, ValueError): + if not isinstance(b, (list, tuple)) or len(b) < 6: + continue + date = b[0] + open_, close, high, low = float(b[1]), float(b[2]), float(b[3]), float(b[4]) + volume = float(b[5]) if b[5] not in (None, "") else 0.0 + except (IndexError, ValueError, TypeError): continue cur = conn.execute( - "INSERT OR IGNORE INTO stock_daily (code, date, open, close, high, low, volume, amount) " - "VALUES (?,?,?,?,?,?,?,?)", - (code, date, float(open_), float(close), float(high), float(low), volume, amount)) + "INSERT OR IGNORE INTO stock_daily (code, date, open, close, high, low, volume) " + "VALUES (?,?,?,?,?,?,?)", + (code, date, open_, close, high, low, volume)) new += cur.rowcount total_new += new ok += 1