|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
现有代码如下:
from sys import argv
script, first, second, third = argv
print("脚本名为:", script)
print("你的第一个变量为:", first)
print("你的第二个变量为:", second)
print("你的第三个变量为:", third)
在jupyter-lab中保存成Untitled.ipynb,shift+Enter,可以运行,但是报错如下:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
Cell In[1], line 2
1 from sys import argv
----> 2 script, first, second, third = argv
3 #script, first, second = argv
4 print("脚本名为:", script)
ValueError: not enough values to unpack (expected 4, got 3)
如果我把代码换成:
from sys import argv
#script, first, second, third = argv
script, first, second = argv
print("脚本名为:", script)
print("你的第一个变量为:", first)
print("你的第二个变量为:", second)
#print("你的第三个变量为:", third)
shift+Enter后能够运行,结果如下:
脚本名为: D:\anaconda3\Lib\site-packages\ipykernel_launcher.py
你的第一个变量为: -f
你的第二个变量为: C:\Users\Administrator\AppData\Roaming\jupyter\runtime\kernel-f5fe8642-d26a-4fa8-ac63-c7927f7b1fff.json。
但是,如果我把上述代码保存成ex13.py, 在Jupyter-Lab终端中输入py ex13.py ,报错:
PS C:\Users\Administrator> python ex13.py
Traceback (most recent call last):
File "C:\Users\Administrator\ex13.py", line 2, in <module>
script, first, second, third = argv
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ValueError: not enough values to unpack (expected 4, got 1)
为什么会这样呢? 求解~~
鱼油你好!我来帮你解释一下这个 argv 的问题。
首先, sys.argv 是一个列表,它包含了命令行参数。第一个元素是脚本的名称,后面的元素是用户传入的参数。
在 Jupyter-Lab 中运行时,代码是通过 IPython 内核执行的,所以 argv 被自动设置成了内核的启动参数(比如内核启动器的路径和配置文件),而不是你期望的脚本参数。这就是为什么你解包成三个变量时能运行,但输出的是 Jupyter 的内部信息。
在终端中运行脚本时,如果你只输入 python ex13.py,没有传入任何额外参数,那么 argv 只包含脚本名称(一个元素)。但你的代码试图解包成四个变量,所以报错说“expected 4, got 1”。
解决方法:
- 在 Jupyter-Lab 中,如果你想测试 argv,可以使用 IPython 的魔术命令,例如:
这样就能模拟命令行传入参数。
- 在终端中,运行脚本时需要传入足够的参数,例如:
- python ex13.py 参数1 参数2 参数3
复制代码
这样 argv 就会有四个元素(脚本名 + 三个参数),解包就不会报错了。
总之,问题在于运行环境不同导致 argv 的内容不同。在 Jupyter 中它被内核占用,在终端中需要你手动传入参数。希望这能帮到你!如果还有疑问,欢迎继续问。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
|
|