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

2024-05-14 06:57:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在跟踪这个tensorflowtutorial在设置环境两天后,我终于可以使用cmd运行premade_estimator.py

但是,当我试图在jupyter笔记本上运行相同的代码时,我得到了一个错误:

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

An exception has occurred, use %tb to see the full traceback.

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

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


Tags: installpiportopycmd环境use
3条回答

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

args = parser.parse_known_args()[0]

而不是

args = parser.parse_args()

我今天遇到这个问题,找到了一个快速而愚蠢的解决方案,就是为qtconsole/ipython传递的-f参数插入一个参数处理器,我们没有预料到。在parser.add_argument结束时,我输入:

parser.add_argument("-f", "--fff", help="a dummy argument to fool ipython", default="1")

我不使用-f参数,所以对我来说没有损失。

我不想仅仅因为ipython出现在一台特定的计算机上的工作流中而重新设计一个更大的参数处理框架。。。

我明白了!之所以出现错误,是因为此代码使用^{},而此模块用于编写用户友好的命令行界面,所以它似乎与Jupyter Notebook有冲突。

我在这个page中找到了解决方案:

我们要做的是:

删除或注释这些行:

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:])

对于以这种方式使用库^{}的词典:

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

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

更新

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

funtion(batch_size=100, train_steps=1000)

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

*args在函数中传递一个元组作为参数,在这种情况下,它将是:

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

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

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

只要谷歌一下,你就会找到一个很好的解释如何使用它们,这里有一个documentation我用来研究这个。

相关问题 更多 >

    热门问题