Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 24, 2014 20:13:50

perevezenzev
Зарегистрирован: 2014-01-24
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Ошибка в split()

# -*- coding: cp1251 -*-
import serial
import os
import sys
import time
import xlwt
 #открываем порт
ser = serial.Serial('COM6', 9600, dsrdtr = 1,timeout = 0)
 
#подготовка лог файлов для данных от разных устройств
prgpath = os.path.dirname(os.path.abspath(sys.argv[0]))
  
#основной цикл программы
while 1:
        serialline = ser.readline().split('\n')
        data = serialline[0]
        if len(data) > 0:
                code = data.split(':')
                datastr = code[1].split(';')
                unitID = datastr[0]
                
                if code[0] == "GPS":
                        lat = datastr[1].split('=')
                        lon = datastr[2].split('=')
                        alt = datastr[3].split('=')
                        data_arr = [code[0], unitID, lat[1], lon[1], alt[1]]
                elif code[0] == "SN":
                        pres = datastr[1].split('=')
                        temp = datastr[2].split('=')
                        data_arr = [code[0], unitID, pres[1], temp[1]]
                elif code[0] == "GY":
                        x = datastr[1].split('=')
                        y = datastr[2].split('=')
                        z = datastr[3].split('=')
                        data_arr = [code[0], unitID, x[1], y[1], z[1]]
                elif code[0] == "MG":
                        x = datastr[1].split('=')
                        y = datastr[2].split('=')
                        z = datastr[3].split('=')
                        data_arr = [code[0], unitID, x[1], y[1], z[1]]  
                else:
                        data_arr = ['UNCKNOW STRING']
                
                print data_arr
                file_data = open(prgpath + "\\data.log", "a+")
                file_data.write(data)
                file_data.write('\n')
                file_data.close()
 
#закрываем порт
ser.close()
wb = xlwt.Workbook()
ws = wb.add_sheet('DATA')
#Строки - Столбцы
ws.write(1, 1, "GPS")
wb.save('example.xls')
на входе в сериал порт
GPS:0000001;LAT=latitude;LON=lontitude;ALT=altitude;
Все отлично работает
Но, если на входе в сериал что то другое выдает следующую ошибку
Traceback (most recent call last):
File “C:\Python27\projects\com.py”, line 21, in <module>
datastr = code.split(';')
IndexError: list index out of range

Отредактировано perevezenzev (Янв. 24, 2014 20:14:12)

Офлайн

#2 Янв. 24, 2014 21:12:39

dimy44
От: Евпатория
Зарегистрирован: 2012-04-21
Сообщения: 463
Репутация: +  42  -
Профиль  

Ошибка в split()

    if len (data) > 0:
        code = data.split(':')
        datastr = code[ 1].split(';')
очевидно data не содержит символов “:”, и список code получается с одним элементом. В следующей строке вы пытаетесь получить из него элемент с индексом 1 (2-й по счёту), отсюда и ошибка. Выводите в проблемных местах с помощью print значения переменных и анализируйте.

Офлайн

#3 Янв. 28, 2014 15:25:48

kise97
Зарегистрирован: 2012-05-31
Сообщения: 83
Репутация: +  4  -
Профиль  

Ошибка в split()

Я вообще в приведенном вами скрипте не вижу строки, которая указана в трейсбеке.

Офлайн

#4 Янв. 28, 2014 20:25:36

dimy44
От: Евпатория
Зарегистрирован: 2012-04-21
Сообщения: 463
Репутация: +  42  -
Профиль  

Ошибка в split()

потому что сайт съел там после “code” скобки квадратные и всё что между ними, надо наверно трейсы тоже в тег code обворачивать

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version