1. 程式人生 > 其它 >出現錯誤list indices must be integers or slices, not str

出現錯誤list indices must be integers or slices, not str

在對影象實現顏色聚類的時候,識別影象顏色,求取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和斷點的功能,非常好用,逐步輸出結果查詢錯誤。