Как настроить sys.argv Python, чтобы соответствующим образом изменить его длину

#python #if-statement #arguments #parameter-passing #index-error

Вопрос:

Я пытался заставить sys.argv[] либо изменить его вывод в соответствии с количеством аргументов, введенных пользователем. Я пытаюсь сделать так, чтобы, если нет sys.argv[5], он использовал бы sys.argv[4]. В настоящее время я пробовал обе эти идеи с моей проблемой всегда IndexError: индекс списка выходит за пределы диапазона, когда я пытаюсь сделать sys.argv[5] пустым:

 if len(sys.argv) is 4:  location = int(sys.argv[1])  order = sys.argv[2]  amount = sys.argv[3]  user = sys.argv[4]  company= sys.argv[4]  print(company) else:  location = int(sys.argv[1])  order = sys.argv[2]  amount = sys.argv[3]  user = sys.argv[4]  company= sys.argv[5]  print(company)  

также попытался изменить «если len(sys.argv) равно 4:» на «если sys.argv[5] != True:». Я прочитал несколько сообщений о решении индекса, но просто не знаю, как на самом деле адаптировать код для моего собственного использования.

Спасибо!

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

1. Списки индексов начинаются с нуля, если len(sys.argv) == 4 тогда первый индекс 0 равен, а последний индекс равен 3

2. Почему вы используете is ?

3. Да, я только что узнал, что индекс на самом деле был 5, а не просто 4 @lain Shelvington.

4. Должен ли я использовать «==» @klutt? Мне было интересно об этом, так как я часто использовал «есть», и это все еще работает.

5. @Mythorim Что вам следует сделать, так это прочитать о том, что делают оба. Использование is здесь — очень странная вещь.

Ответ №1:

Вы можете использовать try/except блок, как показано ниже, где, если index 5 он присутствует, используйте его, в противном случае используйте index 4 .

 if len(sys.argv) gt;= 4:  location = int(sys.argv[1])  order = sys.argv[2]  amount = sys.argv[3]  user = sys.argv[4]  try:  company= sys.argv[5]  except IndexError:  company= sys.argv[4]  print(company) else:  print('Provide minimum 4 args')