Python初学者:如何拆分argv值及解决解包不足错误?
解决argv拆包的ValueError问题
嘿,我刚入门Python的时候也栽过这个跟头!咱们一步步来理清楚:
错误原因
你看到的 ValueError: not enough values to unpack (expected 2, got 1) 意思是:代码里期待从argv里拿到2个值(script和user_name),但实际上只拿到了1个——这个唯一的值就是你的脚本文件名(比如script.py)。
因为argv是一个列表,里面装的是你运行脚本时在命令行输入的所有参数:第一个参数永远是脚本本身的名字,后面的才是你手动传的参数。你现在运行的时候只输入了脚本名,没传用户名参数,所以列表里只有1个元素,自然拆不成两个变量。
正确的运行方式
打开命令行,切换到脚本所在的文件夹,然后这样运行:
python 你的脚本名.py 你的用户名
比如你的脚本叫ex14.py,用户名是Bob,就输入:
python ex14.py Bob
这时候argv的内容就是['ex14.py', 'Bob'],代码里的script, user_name = argv就能顺利把两个值分别赋值给变量了。
额外的新手友好优化
作为新手,很容易忘了传参数,咱们可以给代码加个小检查,避免直接报错:
from sys import argv # 先检查参数数量够不够 if len(argv) != 2: print("哎呀,你漏传参数啦!正确用法是:") print(f"python {argv[0]} 你的名字") exit() # 退出脚本,避免后面报错 script, user_name = argv prompt = '>' print("Hi %s, I'm the %s script." % (user_name, script)) # 后面的代码保持不变...
这样如果忘了传参数,脚本会告诉你该怎么操作,比直接抛错误更友好。
关于Python版本的小提醒
原书用的是Python 2.7,你用Python 3的话,input()的用法是对的(Python 3的input()等价于Python 2的raw_input()),不用改。只是输入的时候不用像Python 2那样给字符串加引号,直接输入文字就行啦。
内容的提问来源于stack exchange,提问作者n00bcoder
相关产品推荐
相关产品推荐

