python sys.argv vs. sys.argv

Я написал этот код:

#!/usr/bin/env python import sys if sys.argv[1] : print sys.argv[1] 

Попробуйте это в консоли при вводе: $ python py.py xxx, который печатает xxx Когда я оставлю его без параметров, появляется ошибка:

Traceback (последний последний вызов): Файл «py.py», строка 4, если sys.argv [1]: IndexError: индекс индекса за пределами диапазона

Теперь с несколькими изменениями:

 #!/usr/bin/env python import sys if sys.argv[1:] : print sys.argv[1:] 

Вы видите, что я изменил [1] на [1:], и теперь, если я наберу «$ python py.py» в консоли и забуду параметр, который не возвращает ошибку. Что происходит за сценой?

2 Solutions collect form web for “python sys.argv vs. sys.argv”

sys.argv – список аргументов. Поэтому, когда вы выполняете свой скрипт без каких-либо аргументов, этот список, к которому вы обращаетесь к индексу 1, пуст и обращающийся к индексу пустого списка, поднимет IndexError .

С вашим вторым блоком кода вы делаете кусочек списка, и вы проверяете, не является ли срез списка из индекса 1 и форварда, а затем распечатайте этот фрагмент списка. Почему это работает, потому что, если у вас есть пустой список и делает на нем срез так, срез возвращает пустой список.

 last_list = [1,2,3] if last_list[1:]: print last_list[1:] >> [2,3] empty_list = [] print empty_list[:1] >> [] 

sys.argv – это список аргументов (которые вы передали вместе с вашей командой в терминале), но когда вы не передаете какие-либо аргументы и не обращаетесь к индексу 1 пустого списка, он дает очевидную ошибку (IndexError). но во втором случае, когда вы делаете нарезку из индекса 1 и используя членов списка с индексом> 1, не должно быть проблем, даже если список пуст, так как тогда нарезанный список также будет пустым, и мы не получим ошибка.

  • Экземпляр класса как статический атрибут
  • Манипуляции строк: заглавные буквы первой буквы каждого предложения
  • Не удается установить zbar
  • json.loads () дает исключение, что он ожидает значение, похоже, что значение есть
  • Не удалось загрузить встроенную среду выполнения TensorFlow. Python 3.5.2
  • Python 2 и 3 совместимые модули пространства имен (с использованием pip)
  • Почему я должен использовать метод __prepare__ для получения пространства имен класса?
  • Как получить имя файла и lineno атрибута SyntaxError
  • Python - лучший язык программирования в мире.