Непонятно, что вы пытаетесь сделать с sys.argv
. Это список строк, созданных оболочкой и интерпретатором Python. Обычно он читается, как и любой список, но также может быть изменен.
In [16]: import sys
In [17]: sys.argv
Out[17]:
['/usr/local/bin/ipython3',
'--pylab',
'qt',
'--nosep',
'--term-title',
'--InteractiveShellApp.pylab_import_all=False']
In [18]: input(sys.argv)
['/usr/local/bin/ipython3', '--pylab', 'qt', '--nosep', '--term-title', '--InteractiveShellApp.pylab_import_all=False']1 2 3
Out[18]: '1 2 3'
При использовании в качестве аргумента для input
он просто служит строкой приглашения. Какой смысл в этом? input
возвращает нам строку (по крайней мере, в Py3; Py2 отличается).
a,b,c = ...
распаковка так неумолима. Возникает ошибка, если задано неправильное количество элементов в RHS.
In [19]: a,b,c = input('3 items: ').split() # split input string on space
3 items: a b c
In [20]: a,b,c = input('3 items: ').split()
3 items: d e
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-20-7dacf1e93e8c> in <module>
----> 1 a,b,c = input('3 items: ').split()
ValueError: not enough values to unpack (expected 3, got 2)
In [21]: a,b,c = input('3 items: ').split()
3 items: 1 2 3 4
---------------------------------------------------------------------------
...
ValueError: too many values to unpack (expected 3)
Итак, я вижу три вопроса:
- вопрос о том, что такое
sys.argv
и как его можно использовать
- в чем аргумент
input
do
- хрупкое использование распаковки
===
Я думаю, вы не понимаете, что делает input
и как работает распаковка:
In [67]: a,b,c = input('3 numbers: ')
3 numbers: 123
In [68]: a
Out[68]: '1'
In [69]: b
Out[69]: '2'
In [70]: c
Out[70]: '3'
In [71]: a,b,c = input('3 numbers: ')
3 numbers: 1 2 3
...
ValueError: too many values to unpack (expected 3)
In [74]: a,b,c = input('3 numbers: ')
3 numbers: 1234
...
ValueError: too many values to unpack (expected 3)
Это использование input
эквивалентно:
In [72]: a,b,c='123'
3 символа в строке разделены между 3 переменными. Если вы укажете более длинную (или более короткую) строку, существует несоответствие с тремя переменными, которые требуются для распаковки.
Или повторить ваш пример, где вы набрали 'mn nn nj':
In [75]: input(['a','list','of','strings'])
['a', 'list', 'of', 'strings']mn nn nj
Out[75]: 'mn nn nj'
In [76]: a,b,c=_ # trying to unpack that string to 3 variables
...
ValueError: too many values to unpack (expected 3)
In [77]: a,b,c=_.split() # split on white space
In [78]: a,b,c
Out[78]: ('mn', 'nn', 'nj')