Как исправить ошибку «IndexError: список индексов вне диапазона» приложения чата p2p на Python? - PullRequest
0 голосов
/ 11 мая 2019

Я делаю приложение чата p2p от Python. Ошибка в «message = inputt [1]» на стороне клиента. Из-за этой ошибки, когда я хочу отправить сообщение, программа выводит «Вы должны написать свое имя»

Я не знаю, как решить, потому что я не понимал логику ошибки. Было бы здорово, если бы я мог получить объяснение, почему я получаю эту ошибку и решение.

import socket
import json
import time
import threading
import datetime

onlineUsers = dict()

while True:

    message = input()

    if(message=='list'):
        print('ONLINE USERS...')
        for key in onlineUsers:
            print(key)

    else:

        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        port=5001


        try:
            inputArray = message.split(':',1)
            # 0=username  1=message
            username=inputArray[0]
            message=inputArray[1]
            ip=onlineUsers[username]
            s.connect((ip, port))
            s.sendall(message)

        except:
            print("You must write your name <name: message >")

        s.close()

1 Ответ

0 голосов
/ 11 мая 2019

Я думаю, что ключ к тому, что пошло не так, в самом вопросе. В операторе печати указано "You must write your name <name: message >", поэтому ваше сообщение будет john : this is a test, но вместо этого вы отправляете this is a test, что при разделении на : даст вам список из одного элемента ['this is a test'] и при попытке получить второй индекс этого списка, вы получите IndexError: list index out of range

Так что, если вы исправите ваше сообщение в соответствии с ожидаемым форматом, код должен работать следующим образом

message = 'john : this is a test'
inputArray = message.split(':')
# 0=username  1=message
username = inputArray[0].strip()
message = inputArray[1].strip()
print(username)
print(message)

Выход будет

john
this is a test
...