python: есть ли способ ввода различных аргументов, например, с 1,2 или 3 аргументами, без ошибки типа?

#python #list #sockets #arguments #typeerror

#python #Список #сокеты #аргументы #ошибка типа

Вопрос:

Первая публикация при переполнении стека, поэтому дайте мне все советы, когда дело доходит до постановки правильного вопроса и еще много чего. В настоящее время я использую модуль сокета в python для школьного проекта для создания «интерфейса командной строки / виртуального маршрутизатора», который может настраивать прослушивание «адресов» (мы можем использовать порты для упрощения), рекламы маршрутизатора, включения виртуальных интерфейсов и т. Д. Самое большое препятствие, с которым я сталкиваюсь на данный момент, — это выяснить, чтобы командная строка принимала различные размеры аргументов, не сталкиваясь с ошибкой типа. Цель (сначала) состоит в том, чтобы заставить командную строку принимать одинарные, двойные и тройные аргументы вместо постоянных двух, которые у меня уже есть; то, что мой код уже делает, это принимает входные данные, разбивает их на разные аргументы, а затем использует их. Я не знаю, как начать пытаться изменить это. Я пытался создавать значения по умолчанию всякий раз, когда нет трех аргументов, но это было безрезультатно. Код начинается как приглашение командной строки без «>», готовый принять любой ввод. Затем я ввожу «команду», такую как listenport 200, после чего выполняется код, а затем прослушивается порт 200 (код не показан, поскольку он не применим к проблеме). Однако иногда мне нужны три аргумента, такие как remoteHost, для которых одновременно требуются remoteHost и RemotePort . Вместо того, чтобы постоянно вводить третье значение, которое ничего не даст, я хотел попытаться заставить его принимать различные ответы. Приветствуется любая помощь.

 while 1:
    try:
        message, address = clientSocket.recvfrom(8192) # Buffer size is 8192. Change as needed.
        if message:
            print (address, "> ", message.decode())
    except:
        pass
 
    input = getLine();
    if(input != False):
        port = 0 
        #port2 = 0 
        print ("input is: ", input)
        delimitedInput = input.split(' ')
        print (delimitedInput)
        (command, port) = delimitedInput
        #(command, port, port2) = delimitedInput
        print ("Command: ", command)
        print ("number: ", port)
        #print ("number: ", port2) 
 

Комментарии:

1. Просто проверьте len(delimitedInput) , сколько аргументов командной строки вы получили, а затем переходите на основе этого.

2. О! Итак, я должен разделять свои команды на основе len(delimitedInput) и иметь один аргумент в одной ветке, два аргумента в другой ветке и три аргумента в третьей ветке?

3. Да, просто numC = len(delimitedInput) , а затем if numC > 1 и т. Д. То, как вы выполняете ветвление, зависит от вашей логики.