#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')