Your example is better written as (to cope with arbitrary usages):
from sys import argv
script, args = argv[0], argv[1:]
print("The script is called: ", script)
for i, arg in enumerate(args):
print("Arg {0:d}: {1:s}".format(i, arg))
The reason you'd be getting an error (place show Traceback) is because you're calling your script with fewer arguments than you are trying to "unpack".
See: Python Packing and Unpacking and Tuples and Sequences where it says:
This is called, appropriately enough, sequence unpacking and works for
any sequence on the right-hand side. Sequence unpacking requires the
list of variables on the left to have the same number of elements as
the length of the sequence. Note that multiple assignment is really
just a combination of tuple packing and sequence unpacking.
To demonstrate what's going on with your example adn eht error you get back:
>>> argv = ["./foo.py", "1"]
>>> script, a = argv
>>> script
'./foo.py'
>>> a
'1'
>>> script, a, b = argv
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: need more than 2 values to unpack
The error should be obvious here; You are trying to unpack more values than you have!
To fix your example I'd do this:
from sys import argv
if len(argv) < 4:
print ("usage: {0:s} <bike> <car> <bus>".format(script))
raise SystemExit(-1)
script, bike, car, bus = argv
print ("The script is called:", script)
print ("The first variable is:", bike)
print ("The second variable is ", car)
print ("Your third variable is : ", bus)
Update: I just noticed this; but all your print()(s) are wrong. You need to either use str.format() or put the argument inside the print() function.
python3 myscript.pyor double-clickingmyscript.pyin Explorer/whatever), thenargvwill only have 1 element, not 4, which would give you exactly the error you're seeing.printstatement isn't correct either...