如何修复 ipykernel_launcher.py:错误:jupyter 中无法识别的参数?

新手上路,请多包涵

在设置环境两天后,我正在关注这个 tensorflow 教程,我终于可以使用 cmd 运行 premade_estimator.py

但是当我尝试在 jupyter notebook 中运行相同的代码时,出现了这个错误:

>  usage: ipykernel_launcher.py [-h] [--batch_size BATCH_SIZE]
>                              [--train_steps TRAIN_STEPS]
>
> ipykernel_launcher.py: error: unrecognized arguments: -f C:\Users\david\AppData\Roaming\jupyter\runtime\kernel-4faecb24-6e87-40b4-bf15-5d24520d7130.json
>
> ```
>
> 发生异常,使用 %tb 查看完整的回溯。
>
> ```
>  SystemExit: 2
>
> C:\Anaconda3\envs\python3x\lib\site-packages\IPython\core\interactiveshell.py:2918:
> UserWarning: To exit: use 'exit', 'quit', or Ctrl-D. warn("To exit: use 'exit', 'quit', or Ctrl-D.", stacklevel=1)
>
> ```

我尝试使用以下方法修复它但没有成功:

pip install –ignore-installed –upgrade jupyter

pip install ipykernel python -m ipykernel install

conda install notebook ipykernel ipython kernelspec install-self

”`

任何想法将不胜感激!谢谢!

原文由 virtualdvid 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 3.4k
2 个回答

我知道了!报错的原因是这段代码使用 argparse 并且这个模块是用来编写用户友好的命令行界面的,所以看起来,它与 Jupyter Notebook 有冲突。

我在此 页面 中找到了解决方案:

我们要做的是:

删除或评论这些行:

 parser = argparse.ArgumentParser()
parser.add_argument('--batch_size', default=100, type=int, help='batch size')
parser.add_argument('--train_steps', default=1000, type=int,
                    help='number of training steps')

并替换 args

 args = parser.parse_args(argv[1:])

对于使用库 easydict 的字典,以这种方式:

 args = easydict.EasyDict({
    "batch_size": 100,
    "train_steps": 1000
})

使用 easydict 我们可以访问字典值作为参数的属性。

更新

经过今年对 python 的深入研究,我发现这个问题的解决方案更加简单(我们不需要使用任何外部库或方法)。 argparse 只是从终端向 python 脚本传递参数的众多方法之一。当我尝试在 jupyter notebook 中这样做时,显然那是行不通的。我们可以直接在函数中替换参数,例如:

 funtion(batch_size=100, train_steps=1000)

现在,如果我们的函数有一长串参数,我们可以使用 *args**kargs

*args 在函数中传递一个元组作为参数,对于这种情况,特别是:

 args = (100, 1000)
function(*args)

**kargs 将字典作为参数传递给我们的函数:

 kargs = {"batch_size": 100,
        "train_steps": 1000}
function(**kargs)

只需谷歌一下,您就会找到关于如何同时使用它们的很好的解释,这里有 一份 我用来研究它的文档。

原文由 virtualdvid 发布,翻译遵循 CC BY-SA 4.0 许可协议

一个更优雅的解决方案是:

 args, unknown = parser.parse_known_args()

代替

args = parser.parse_args()

原文由 Badger Titan 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题