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, не должно быть проблем, даже если список пуст, так как тогда нарезанный список также будет пустым, и мы не получим ошибка.

  • AssertionError (только 3.X) при вызове Py_Finalize с потоками
  • unicode_literals и type ()
  • Как мы можем создавать и распространять скрипты python в среде Windows?
  • Запретить чтение данных из пустого FIFO из блокировки
  • Обратная совместимость Python 3.5 для внешних модулей
  • Есть ли разница между и при копировании списка?
  • RecursionError при использовании декоратора @property
  • Понимание time.perf_counter () и time.process_time ()
  • Чтение текста из узлов XML с использованием libxml2 на языке Python
  • Как перезаписать предыдущую строку печати в Jupyter / IPython
  • Long Int literal - неверный синтаксис?
  • Python - лучший язык программирования в мире.