2010-10-30 11 views
8

en Python me sale este error:TypeError: objeto 'int' es unsubscriptable

TypeError: 'int' object is unsubscriptable 

Esto sucede en la línea de:

sectorcalc[i][2]= ((today[2]/yesterday[2])-1) 

no pude encontrar una buena definición de unsubscriptable para el pitón en cualquier sitio.

for quote in sector[singlestock]: 
     i+=1 
     if i < len(sector): 
      if i==0: 
       sectorcalc[i][0]= quote[0] 
       sectorcalc[i][2]= 0 
       sectorcalc[i][3]= 0 
       sectorcalc[i][4]= 0 
       sectorcalc[i][5]= 0 
       sectorcalc[i][6]= 0 
       sectorcalc[i][7]= 0 
      else:      
       yesterday = sector[singlestock-1][i] 

       print yesterday         

       today = quote 

       print type(today[2]) 
       sectorcalc[i][2]= ((today[2]/yesterday[2])-1) 
       sectorcalc[i][3]= (today[3]/yesterday[3])-1 
       sectorcalc[i][4]= (today[4]/yesterday[4])-1 
       sectorcalc[i][5]= (today[5]/yesterday[5])-1 
       sectorcalc[i][6]= (today[6]/yesterday[6])-1 
       sectorcalc[i][7]= (today[7]/yesterday[7])-1 

¿Qué significa este error?

+0

(Como @duffymo sugiere :) No relacionado con el error, debe agregar más bucles;) – delnan

+0

Uno de estos es unsubscriptable 1) sectorcalc [i] 2) hoy, 3) ayer. Usted ya dijo que hoy es una lista. Mira los otros. – pyfunc

+0

Buen punto, realmente solo es producto de mi falta de experiencia con python que no tiene loops normales para – b8b8j

Respuesta

14

El "[2]" en la actualidad [2] se llama subíndice.

This usage is possible only if "today" is a sequence type. Native sequence types - List, string, tuple etc

Puesto que usted está recibiendo un error - 'int' es objeto unsubscriptable. Significa que "hoy" no es una secuencia sino un objeto de tipo int.

Deberá buscar/depurar por qué "today" o "yesterday" es un objeto de tipo int cuando espera una secuencia.

[Editar: para que quede claro]

Error can be in

  1. sectorcalc [i]
  2. hoy (ya ha demostrado es una lista)
  3. ayer
+0

Gracias por su ayuda, pero cuando imprimo hoy: ['AMGN', datetime.datetime (2009, 1, 5, 0, 0), 59.219999999999999, 59.649999999999999, 58.0, 59.649999999999999, 10940100.0, 59.649999999999999] ¿No es eso una secuencia? – b8b8j

+0

La línea anterior a la que falla ('tipo de impresión (hoy [2])') obviamente funciona bien y los subíndices 'hoy'. Entonces debe ser subscriptable. – delnan

+0

@ b8b8j: el error podría ser que "hoy" o "ayer" no es una secuencia. El error está en la línea y deberá determinar cuál causa el error. – pyfunc

2

Esto es confuso para leer:

today = quote 

¿today = datetime.date.today()? ¿Por qué una cita repentinamente se referiría a una cita? ¿El nombre de la variable debe ser quoteForToday o algo más expresivo? Lo mismo para yesterday. Dividir dos fechas a medida que lo haces no tiene sentido para mí.

Dado que este es un quote, ¿today y yesterday se refieren a precios o tarifas en días diferentes? Los nombres importan - elíjalos con cuidado. Puede ser que tengas que mantener estos seis meses a partir de ahora, y tampoco recordarás lo que significan.

No es que el código que escribió sea válido, pero no veo por qué no usaría un bucle.

for j in range(2,7): 
    sectorcalc[i][j] = (today[j]/yesteday[j])-1 

en lugar de

 sectorcalc[i][2]= ((today[2]/yesterday[2])-1) 
     sectorcalc[i][3]= (today[3]/yesterday[3])-1 
     sectorcalc[i][4]= (today[4]/yesterday[4])-1 
     sectorcalc[i][5]= (today[5]/yesterday[5])-1 
     sectorcalc[i][6]= (today[6]/yesterday[6])-1 
     sectorcalc[i][7]= (today[7]/yesterday[7])-1 
+0

otra alternativa es usar la asignación de división: 'sectorcalc [i] [2: 7] = [(t/y)) - 1 para t, y en zip (hoy [2: 7] , ayer [2: 7])] ', otra alternativa es reemplazar con una nueva lista (aunque esto tendrá una semántica ligeramente diferente):' sectorcalc [i] = [quote [0], 0, 0, 0, 0, 0, 0] ' –

1

cómo reproducir ese error:

myint = 57 
print myint[0] 

la gente que escribió el compilador dijo que no se puede hacer eso de la siguiente manera:

TypeError: 'int' object is unsubscriptable 

Si desea subíndice algo, utilizar una matriz de esta manera:

myint = [ 57, 25 ] 
print myint[0] 

que imprime:

57 

Solución:

Cualquiera de promover su int a una lista o algún otro tipo indexado, o deja de suscribirte r int.

Cuestiones relacionadas