出現錯誤list indices must be integers or slices, not str
阿新 • • 發佈:2022-05-20
在對影象實現顏色聚類的時候,識別影象顏色,求取k均值距離最近的點時出現該問題:
原始碼:
def closest_colour(requested_colour): min_colors = {} for key, name in color_dict['color_names'] .items() : r_c, g_c, b_c = webcolors.hex_to_rgb( "#" + key) rd = (r_c - requested_colour[0]) ** 2 gd = (g_c - requested_colour[1] ) ** 2 bd = (b_c - requested_colour[2] ) ** 2 min_colors[math.sqrt(rd + gd + bd)] = name # print(min(min_colours.keys( ) ) ) return min_colors[min(min_colors.keys( ) ) ]
執行結果及報錯內容
錯誤:list indices must be integers or slices, not str
我在經過查詢,該錯誤的意思是提示list的索引必須是整數或者片,而不是str,
完整的報錯內容為:
Traceback (most recent call last): File "//Desktop-r2hqkul/共享/fengshuiling/julei/k-means2.py", line 184, in <module> main() File "//Desktop-r2hqkul/共享/fengshuiling/julei/k-means2.py", line 181, in main plotColorClusters(img) File "//Desktop-r2hqkul/共享/fengshuiling/julei/k-means2.py", line 150, in plotColorClusters cluster_map, kmeans = TrainKMeans(img) File "//Desktop-r2hqkul/共享/fengshuiling/julei/k-means2.py", line 49, in TrainKMeans h, name = findColorName(c) File "//Desktop-r2hqkul/共享/fengshuiling/julei/k-means2.py", line 98, in findColorName aname, cname = get_colour_name((int(rgb[0]), int(rgb[1]), int(rgb[2]))) File "//Desktop-r2hqkul/共享/fengshuiling/julei/k-means2.py", line 134, in get_colour_name closest_name = closest_colour(requested_colour) File "//Desktop-r2hqkul/共享/fengshuiling/julei/k-means2.py", line 109, in closest_colour for key, name in color_dict['color_names'].items(): TypeError: list indices must be integers or slices, not str
109行出現問題,進行標點debug後發現是檔案讀取的問題,再讀取color_dict時無法正確讀到正確資料,重新檢查檔案,發現我使用的color_jsion顏色資料檔案是從官網下載的,是沒有經過處理的。重新找到下載該程式碼的github尋找jsion檔案。發現原博主給的是已經將顏色資訊轉換為16進位制的檔案,再次處理執行,成功執行。
本次錯誤重點:在尋找錯誤時,需要學會正確靈活使用debug和斷點的功能,非常好用,逐步輸出結果查詢錯誤。