Foros del Web » Programando para Internet » Python »

[SOLUCIONADO] Un TypeError dificil de resolver

Estas en el tema de Un TypeError dificil de resolver en el foro de Python en Foros del Web. Soy un estudiante que esta tratando de terminar la tesis Tal vez esta pregunta no tenga mucha relevancia para algunas personas, pero todavía no he ...
  #1 (permalink)  
Antiguo 27/04/2014, 08:29
 
Fecha de Ingreso: abril-2014
Ubicación: Colombia
Mensajes: 7
Antigüedad: 10 años, 6 meses
Puntos: 0
Un TypeError dificil de resolver

Soy un estudiante que esta tratando de terminar la tesis

Tal vez esta pregunta no tenga mucha relevancia para algunas personas, pero todavía no he encontrado una solución posible.

Tengo un problema con mi código. Un problema que según algunos usuarios de stackoverflow no debería tener. Cuando ejecuto mi código me muestra esto:

Cita:
TypeError: bytearray index out of range.
Pero ninguna de las posibilidades que ellos me dieron me sirvió para solucionar mi problema. Dichas soluciones son:

Código:
1. datosOEM = bytearray(900000)
Código:
2. datosOEM = bytearray(5)
    print(datosOEM)          
    datosOEM[0] = 65
    print(datosOEM)
Lo que trate de hacer es pasar estas dos lineas de Java a Python:

Código:
- public static byte[]  datosOEM = new byte[900000];
- public static byte x1=0,x2=0,x3=0,x4=0,x5=0,x6=0;

Entonces algunas personas de stackoverflow me dieron esas recomendaciones. Cuando ejecuto esas lineas en un archivo aparte lo que obtengo es:
1. Con el primero la pantalla se congela
2. Con el segundo tengo resultado pero solo entre 0-256

Por cierto estoy utilizando Python 2.7 en una Raspberry pi. Estoy tomando datos a través del puerto usb-serial, pero no creo que eso sea lo que esta causando este problema. Este es mi código inicial:

Código:
   # -*- coding: utf-8 -*-
    import serial
    resp=0
    datosOEM=bytearray(5)
    print(datosOEM)
    datosOEM[0]=65
    print(datosOEM)
    x=[0 for i in range(6)]
    port =serial.Serial(
        "/dev/ttyUSB0",
        baudrate=9600,
        parity=serial.PARITY_NONE,
        stopbits=serial.STOPBITS_ONE,
        bytesize=serial.EIGHTBITS,
        writeTimeout = 0,
        timeout = 10,
        rtscts=False,
        dsrdtr=False,
        xonxoff=False)
    data=bytes([0x0c,0x80,0x09,0x00,0xf0,0xce,0x61,0x9d,0x01,0x00,0x01,0x00,0x00,0x00]) 
    print(port.isOpen()) 
    print("Port opened...") 
    port.write(data) 
    print("Data sent")
    print("inside while")
    response=port.read(8)
    print(response)
    k=0;
    trama=1;
    B=0;
    C=0;
    conexion=True;                 
    if(conexion):
        #{
        print ('conexion ON')
        while(response<200):
            print ('data save')
            while(C==0):
                #{
                print ('what is C?')
                x[0]=datosOEM[k];
                if(x[0]==1):
                    #{
                    print ('what is x[0]?')
                    x[1]=datosOEM[k+1];
                    if((x[1]&1)==1):
                        #{
                        print ('what is x[1]?')
                        C=1;
                        #}
                    #}
                k=k+1;
                #}
            k=k-1;
            #}
La linea que esta fallando es:

Cita:
x[0]=datosOEM[k];
  #2 (permalink)  
Antiguo 27/04/2014, 10:25
 
Fecha de Ingreso: febrero-2011
Mensajes: 54
Antigüedad: 13 años, 8 meses
Puntos: 18
Respuesta: Un TypeError dificil de resolver

No se si la indentación está mal o te has dejado algo.
El valor de C siempre es el mismo, el de K se incrementa en 1 en cada itereación y cuando se acaba la longitud de datosOEM salta bytearray index out of range. No?

Saludos
  #3 (permalink)  
Antiguo 27/04/2014, 12:44
 
Fecha de Ingreso: abril-2014
Ubicación: Colombia
Mensajes: 7
Antigüedad: 10 años, 6 meses
Puntos: 0
Respuesta: Un TypeError dificil de resolver

El valor de C comienza en 0 y luego cambia a 1, la k se incrementa o reduce en 1 y datosOEM es tal como piensa
  #4 (permalink)  
Antiguo 28/04/2014, 08:32
 
Fecha de Ingreso: abril-2014
Ubicación: Colombia
Mensajes: 7
Antigüedad: 10 años, 6 meses
Puntos: 0
Respuesta: Un TypeError dificil de resolver

Luego de quitar los puntos y coma, cambie dos print. Primero el que esta enseguida de while(resp<0) este me imprime un 0. Después de while(C==0) coloque print('k =')y print(k), cuando ejecuto esto me imprime el valor de k del 0 al 5 y luego me arroja un IndexError: bytearray out of range
  #5 (permalink)  
Antiguo 15/05/2014, 09:23
 
Fecha de Ingreso: abril-2014
Ubicación: Colombia
Mensajes: 7
Antigüedad: 10 años, 6 meses
Puntos: 0
Respuesta: Un TypeError dificil de resolver

Solo cambie esto:
Cita:
if x[0]==1:
if (x[1]&1)==1:
a esto
Cita:
if x[0]==0
if (x[1]&1)==0
y eso fue todo gracias por colaborarme

Etiquetas: java
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:12.