Vibe Coder

變數、型別、資料結構:dict、list、None 看懂就懂一半

AI 生的程式幾乎都在操作變數、型別與 dict、list 這兩種資料結構。看懂型別能判斷型別轉換對不對,看懂 dict 和 list 的取值方式,就等於看懂了八成的 AI 程式碼,也才能提前抓出 None 造成的錯誤。
變數、型別、資料結構:dict、list、None 看懂就懂一半

變數、型別、資料結構:dict、list、None 看懂就懂一半

API 回傳的數字常常其實是字串,直接拿去計算就會出錯;而 AI 幾乎所有輸出的資料,格式都是 dictlist。看懂變數、型別和這兩種資料結構,就等於看懂了 AI 程式碼的八成。

你將學到什麼

變數是什麼

用一個盒子的比喻搞懂 Python 怎麼存放資料。

四種基本型別

str、int、float、bool 分別長什麼樣,各自的常見陷阱。

list 與 dict 怎麼取值

索引從零開始,key 取值分兩種安全等級,一次搞懂。

None 的隱藏炸彈

AI 最常忘記處理的空值,看到這些訊號要提高警覺。

為什麼 Vibe Coder 需要懂變數與型別

型別錯誤是最常見的 bug,API 回傳的數字常常是字串,直接拿去計算就會出錯,看得懂型別才能判斷 AI 有沒有轉換正確。dict 和 list 是 AI 幾乎所有輸出的標準格式,看懂它們等於看懂一半的程式。而 None 是最常見的隱藏炸彈,AI 常常沒有處理找不到資料的情況,一旦下一行直接取值就會爆炸。

變數:暫時存放資料的盒子

變數就是暫時存放資料的盒子,用等號把值放進去,之後用變數名稱把它取出來。

name = "Joan"
age = 30
is_active = True
data = None

print(name)
print(age + 1)

四種基本型別,各自的陷阱

型別長什麼樣常見陷阱
字串 str雙引號或單引號包起來的文字API 回傳的數字常常是字串,要轉換才能計算
整數 int沒有小數點的數字字串和整數不能直接相加,會直接出錯
浮點數 float有小數點的數字浮點數計算有精度問題,兩個小數相加不一定等於預期值
布林值 boolTrue 或 False首字母要大寫,小寫會出現變數未定義的錯誤
怎麼查型別不確定某個變數是什麼型別,用 print(type(x)) 印出來看,就能知道,例如可以知道 API 回傳的到底是 dict 還是 list。

型別轉換:AI 常用的轉換函式

age_str = "25"
age_int = int(age_str)
price = float("99.9")
label = str(42)
轉換失敗會出現 ValueErrorint("abc") 這種轉換會直接出現 ValueError,因為它不是數字格式。AI 生的程式常常沒有先驗證格式就轉換,遇到轉換相關的程式,可以主動請 AI 加上防護。
list:用索引取值(從 0 開始)TaipeiTokyoSeoul012 或 -1dict:用 key 取值nameJoanage30cityTaipei
list 靠位置找東西,dict 靠名字找東西。

List:有順序的清單

list 用方括號包起來,是有順序的資料集合,AI 常用它存多筆同性質的資料,例如城市清單、搜尋結果。

cities = ["Taipei", "Tokyo", "Seoul"]

print(cities[0])
print(cities[-1])

cities.append("Bangkok")
print(len(cities))

for city in cities:
    print(city)
操作語法說明
取第一個list 的索引 0索引從 0 開始,不是從 1
取最後一個list 的索引 -1負數索引從尾巴算回來
取長度len 函式有幾個元素
新增元素append 方法加到清單最後面
逐一處理for 迴圈AI 最常用的走訪寫法
IndexError:索引超出範圍清單只有三個元素,卻去取第四個位置,就會出現 IndexError。用長度先確認範圍,或先判斷清單是不是空的,可以避免這個錯誤。

Dict:有名字的資料格

dict 用大括號包起來,是鍵值對的資料結構。API 回傳的 JSON 幾乎都是 dict,是 Vibe Coder 最常遇到的資料格式。

user = {"name": "Joan", "age": 30, "city": "Taipei"}

print(user["name"])
print(user.get("email", ""))

user["age"] = 31
user["email"] = "j@x.com"

if "name" in user:
    print(user["name"])
取值方式語法差異
直接取中括號加 key 名稱key 不存在會直接出錯
安全取get 方法加預設值key 不存在會回傳預設值,不會出錯
巢狀結構逐層念dict 裡面可以有 list,list 裡面也可以有 dict。看到多層取值,例如先取 users 清單的第一筆,再取它的 name,逐層念出來就能理解,不用一次想懂全部。

None:AI 最常忘記處理的空值

None 代表什麼都沒有。API 查不到資料、函式失敗、欄位沒有填寫,通常都會回傳 None。看到函式回傳值,先問自己有沒有可能是空值。

看到這個要確認的事
函式裡有回傳空值的分支呼叫這個函式的地方,有沒有判斷回傳值是不是空值
get 方法沒給預設值拿到的可能是空值,後面取值會出錯
API 呼叫後直接取值API 失敗時回傳空值,要先判斷再取值
資料庫查詢結果查不到資料可能回傳空值或空清單,都要判斷

延伸學習

把這篇文章分享給需要的人FacebookLINEThreadsX

常見問答

str 和 int 看起來都是數字,差在哪?
str 是文字格式的數字,例如加了引號的 25;int 是真正的整數。兩者不能直接相加,要先轉換成整數才能計算,這是 API 資料最常見的陷阱。
list 和 dict 要怎麼分辨?
list 用方括號包起來,是有順序的清單,用索引數字取值;dict 用大括號包起來,是鍵值對,用 key 名稱取值。API 回傳的 JSON 幾乎都是 dict。
為什麼要特別注意 None?
因為 AI 生的程式常常忘記處理找不到資料的情況,直接對空值取值就會讓程式崩潰。看到函式有可能回傳空值,先判斷再使用。
KeyError 和 IndexError 有什麼不同?
KeyError 是存取 dict 裡不存在的 key 才會出現;IndexError 是存取 list 時索引超出範圍。兩者都能用先確認再取值的方式避免。