在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()
结果:
TypeError: 'level' is an invalid keyword argument for this function
答案 0 :(得分:1)
Ipython在后台运行一些命令行参数。这干扰了argparse和optparse。
请参阅this bug for Spyder(Ipython IDE),其中-f
被添加为命令选项并崩溃,因为-f
没有处理程序。
您可以尝试检查当前正在播放的参数(就像他们为Spyder错误所做的那样)并设置虚拟处理程序。
运行
import sys
print(sys.argv)
在Ipython中查看输出内容。
在我的系统上,它提供了
['/ usr / lib / python3.6 / site-packages / ipykernel_launcher.py',' - f','/ run / user / 1000 / jupyter / kernel-7537e4dd-b5e2-407c-9d4c-7023575cfccc。 JSON']
Argparse assumes the first entry is the program name(sys.argv[0]
)。为了解决这个问题,我不得不打电话给
parser = argparse.ArgumentParser(prog='myprogram', description='Foo')
...现在argparse
可以在我的笔记本中使用。
答案 1 :(得分:0)
一种解决方案是解析一个空的参数列表:
old_str
另一种方法是使用parse_known_args:
import argparse
parser = argparse.ArgumentParser(description='Foo')
parser.add_argument('--name', '-n', default='foo', help='foo')
args = parser.parse_args([])
答案 2 :(得分:0)
当我在Notebook中运行代码时,出现argparse
用法错误消息:
usage: ipykernel_launcher.py [-h] [--name NAME]
ipykernel_launcher.py: error: unrecognized arguments: -f /run/user/1000/jupyter/kernel-a6504c0c-bed2-4405-8704-c008f52dcba6.json
print(sys.argv)
我得到了
['/home/paul/.local/lib/python3.6/site-packages/ipykernel_launcher.py', '-f', '/run/user/1000/jupyter/kernel-a6504c0c-bed2-4405-8704-c008f52dcba6.json']
sys.argv
解析的 parser
包含用于启动Notebook服务器的值,此特定parser
未设置为处理这些值。
parser.parse_known_args()
显示:
(Namespace(name='foo'),
['-f',
'/run/user/1000/jupyter/kernel-a6504c0c-bed2-4405-8704-c008f52dcba6.json'])
您的解析器无法处理的额外内容放在extras
列表中。
使用自定义argv
列表运行:
parser.parse_args(['-n', 'foobar'])
Namespace(name='foobar')
将argparse
代码(至少parse_args
行)放在__main__
块中是个好主意,因此在导入脚本时不会运行它。当脚本作为脚本运行时,它仍将运行。
if __name__ == '__main__':
import argparse
parser = argparse.ArgumentParser(description='Foo')
parser.add_argument('--name', '-n', default='foo', help='foo')
args = parser.parse_args()
print(args)
使用%run stack50763033.py
时,此脚本也有效。您甚至可以像使用脚本一样给它参数:
%run stack50763033.py -n testing
我不知道哪些代码产生level
关键字错误。如果你需要帮助,你必须给我们追溯。