• Jueves 28 de Marzo de 2024, 20:18

Autor Tema:  Un TypeError dificil de resolver  (Leído 2095 veces)

pligurta465

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Un TypeError dificil de resolver
« en: Domingo 27 de Abril de 2014, 17:10 »
0
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:

Código: [Seleccionar]
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: [Seleccionar]
1. datosOEM = bytearray(900000)
         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: [Seleccionar]
[code]- public static byte[]  datosOEM = new byte[900000];
- public static byte x1=0,x2=0,x3=0,x4=0,x5=0,x6=0;
[/code]

 
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: [Seleccionar]
    # -*- 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:

Código: [Seleccionar]
x[0]=datosOEM[k];

$francisco

  • Miembro activo
  • **
  • Mensajes: 49
  • Nacionalidad: es
    • Ver Perfil
Re:Un TypeError dificil de resolver
« Respuesta #1 en: Sábado 2 de Agosto de 2014, 01:52 »
0
Pues directamente no se donde esta el error, lo que si te está diciendo es que te sales de el rango de la tupla que contiene tu variable, yo utilizo a veces un "print" antes de el error con información que me pueda ser útil, en este caso, la variable "k" para saber su valor, e imprimir datosOEM también para saber cual es su longitud máxima, incluso contarla con un "len()".