鱼C论坛

 找回密码
 立即注册
查看: 33|回复: 1

[已解决]还是argv问题求助~

[复制链接]
发表于 7 小时前 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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)


为什么会这样呢?  求解~~
最佳答案
7 小时前
鱼油你好!我来帮你解释一下这个 argv 的问题。

首先,sys.argv 是一个列表,它包含了命令行参数。第一个元素是脚本的名称,后面的元素是用户传入的参数。

在 Jupyter-Lab 中运行时,代码是通过 IPython 内核执行的,所以 argv 被自动设置成了内核的启动参数(比如内核启动器的路径和配置文件),而不是你期望的脚本参数。这就是为什么你解包成三个变量时能运行,但输出的是 Jupyter 的内部信息。

在终端中运行脚本时,如果你只输入 python ex13.py,没有传入任何额外参数,那么 argv 只包含脚本名称(一个元素)。但你的代码试图解包成四个变量,所以报错说“expected 4, got 1”。

解决方法:
- 在 Jupyter-Lab 中,如果你想测试 argv,可以使用 IPython 的魔术命令,例如:

  1. %run ex13.py 参数1 参数2 参数3
复制代码

这样就能模拟命令行传入参数。

- 在终端中,运行脚本时需要传入足够的参数,例如:

  1. python ex13.py 参数1 参数2 参数3
复制代码

这样 argv 就会有四个元素(脚本名 + 三个参数),解包就不会报错了。

总之,问题在于运行环境不同导致 argv 的内容不同。在 Jupyter 中它被内核占用,在终端中需要你手动传入参数。希望这能帮到你!如果还有疑问,欢迎继续问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 7 小时前 | 显示全部楼层    本楼为最佳答案   
鱼油你好!我来帮你解释一下这个 argv 的问题。

首先,sys.argv 是一个列表,它包含了命令行参数。第一个元素是脚本的名称,后面的元素是用户传入的参数。

在 Jupyter-Lab 中运行时,代码是通过 IPython 内核执行的,所以 argv 被自动设置成了内核的启动参数(比如内核启动器的路径和配置文件),而不是你期望的脚本参数。这就是为什么你解包成三个变量时能运行,但输出的是 Jupyter 的内部信息。

在终端中运行脚本时,如果你只输入 python ex13.py,没有传入任何额外参数,那么 argv 只包含脚本名称(一个元素)。但你的代码试图解包成四个变量,所以报错说“expected 4, got 1”。

解决方法:
- 在 Jupyter-Lab 中,如果你想测试 argv,可以使用 IPython 的魔术命令,例如:

  1. %run ex13.py 参数1 参数2 参数3
复制代码

这样就能模拟命令行传入参数。

- 在终端中,运行脚本时需要传入足够的参数,例如:

  1. python ex13.py 参数1 参数2 参数3
复制代码

这样 argv 就会有四个元素(脚本名 + 三个参数),解包就不会报错了。

总之,问题在于运行环境不同导致 argv 的内容不同。在 Jupyter 中它被内核占用,在终端中需要你手动传入参数。希望这能帮到你!如果还有疑问,欢迎继续问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-11-3 18:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表