Jupyter Notebook 中的 Argparse 引发 TypeError

use*_*893 6 python argparse jupyter-notebook

在 Jupyter Notebook 中使用 argparse 会引发 TypeError。如果我执行与脚本相同的代码,则相同的代码可以正常工作。MWE:

import argparse

parser = argparse.ArgumentParser(description='Foo')
parser.add_argument('--name', '-n', default='foo', help='foo')

args = parser.parse_args()
Run Code Online (Sandbox Code Playgroud)

结果:

TypeError: 'level' is an invalid keyword argument for this function
Run Code Online (Sandbox Code Playgroud)

use*_*893 6

一种解决方案是解析一个空的参数列表:

import argparse

parser = argparse.ArgumentParser(description='Foo')
parser.add_argument('--name', '-n', default='foo', help='foo')

args = parser.parse_args([])
Run Code Online (Sandbox Code Playgroud)

另一种是使用 parse_known_args:

args, _ = parser.parse_known_args()
Run Code Online (Sandbox Code Playgroud)


Ala*_*lan 2

Ipython 正在后台运行一些命令行参数。这会干扰 argparse 和 optparse。

请参阅Spyder (Ipython IDE) 的此错误,其中-f被添加为命令选项并崩溃,因为没有-f.

您可以尝试检查当前正在使用的参数(就像它们对 Spyder bug 所做的那样)并放置一个虚拟处理程序。

跑步

import sys
print(sys.argv)
Run Code Online (Sandbox Code Playgroud)

进入 Ipython 并查看它输出什么。

在我的系统上,它给出了

['/usr/lib/python3.6/site-packages/ipykernel_launcher.py', '-f', '/run/user/1000/jupyter/kernel-7537e4dd-b5e2-407c-9d4c-7023575cfc7c.json']

Argparse 假定第一个条目是程序名称( sys.argv[0])。为了解决这个问题,我不得不打电话

parser = argparse.ArgumentParser(prog='myprogram', description='Foo')
Run Code Online (Sandbox Code Playgroud)

...现在argparse可以在我的笔记本上使用。