Acabo de entrar a Chichaplanet, y me encuentro con la pantalla de error en modo DEBUG de Django!
La lÃnea de error es:
43\. count = tagcount[id]
Y de acuerdo a las variables, que se muestran, se puede ver que en el diccionario tagcount
no existe un valor para la llave id
que es 75 ([75, 'journal comic']).
id = 75
tagcount = {1: 2, 2: 2, 3: 2, 4: 1, 5: 1, 6: 5, 7: 5, 8: 6, 9: 1, 10: 73, 11: 11, 12: 5, 13: 6, 14: 33, 15: 3, 16: 3, 17: 11, 18: 2, 19: 2, 20: 1, 21: 1, 22: 1, 23: 3, 24: 8, 25: 1, 26: 4, 27: 2, 28: 5, 29: 1, 30: 5, 31: 1, 32: 1, 33: 1, 34: 6, 35: 1, 36: 9, 37: 5, 38: 1, 39: 1, 40: 1, 41: 2, 42: 1, 43: 1, 44: 2, 45: 1, 46: 1, 47: 34, 48: 1, 49: 2, 50: 5, 51: 2, 52: 6, 53: 3, 54: 1, 55: 1, 56: 6, 57: 1, 58: 1, 59: 5, 60: 2, 61: 2, 62: 3, 63: 3, 64: 3, 65: 3, 66: 2, 67: 10, 68: 1, 69: 4, 70: 2, 71: 1, 72: 2, 73: 1, 74: 1, 76: 1}
Una alternativa es poner la lÃnea dentro de un bloque try ... except
, O sino usar el metodo get
de los diccionarios, que permite devolver un valor predeterminado en caso no exista un valor para la llave pedida.
try:
count = tagcount[id]
except KeyError:
count = 0
count = tagcount.get(id, 0)
Creo que poner el bloque try ... catch
serÃa mejor, a pesar que usar .get
se vea mas elegante y sea mas corto. La mayorÃa de las veces SI habrá un valor en tagcount para id y se podrá ahorrar la llamada extra al método que probablemente haga algo similar, o tenga un condicional adentro.
Claro, ésto es viendo únicamente esa lÃnea. Pero tal vez sea mejor asegurarse de antemano que en el arreglo tagnames
no hayan claves que no estén en el diccionario
42. for id, name in tagnames:
43. count = tagcount[id] ...
44. weight = [x[0] for x in steps if x[1] >= count and x[1] > 0][0]+1
45. tags.append({'id':id, 'name':name, 'count':count, 'weight':weight})
tagnames = [[7, 'actualidad nacional'], [30, 'administrivia'], [1, 'alex celi'], [13, 'aureal'], [53, 'blogs'], [56, 'casi personal'], [27, 'chicha'], [16, 'cine'], [9, 'cipher'], [42, 'computers'], [74, 'comunidad'], [54, 'conferencias'], [18, 'cultura'], [32, 'culture'], [36, 'debian'], [45, 'debian-es'], [28, 'django'], [43, 'dump'], [69, 'en'], [67, 'es'], [55, 'eventos'], [34, 'free software'], [37, 'freebsd'], [47, 'freedom'], [49, 'freesoftware'], [64, 'funny'], [6, 'futbol'], [29, 'games'], [10, 'general'], [40, 'gnome'], [22, 'humor'], [25, 'humour'], [68, 'inform\xc3\xa1tica'], [44, 'inspiracion'], [23, 'internet'], [48, 'iowa'], [75, 'journal comic'], [4, 'juegos'], [19, 'libertarismo'], [21, 'libros'], [24, 'life'], [11, 'linux'], [46, 'music'], [50, 'musica'], [58, 'net'], [66, 'networking'], [38, 'novell'], [35, 'openbsd'], [14, 'personal'], [63, 'personales'], [8, 'peru'], [72, 'php'], [20, 'pol\xc3\xadtica'], [51, 'programacion'], [31, 'programming'], [26, 'python'], [33, 'science'], [41, 'scifi'], [12, 'security'], [65, 'shits'], [52, 'soft. libre'], [15, 'software libre'], [5, 'star wars galaxies'], [73, 'sysadmin'], [17, 'tech'], [39, 'technology'], [76, 'tecnologia'], [57, 'terror'], [60, 'uncategorized'], [3, 'unidad crema'], [62, 'universidad'], [2, 'universitario de deportes'], [61, 'utpinux'], [59, 'vida'], [70, 'web'], [71, 'xhtml']]
Esperemos que Tabo arregle este feature en Feedjack pronto :)