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)
一种解决方案是解析一个空的参数列表:
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)
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可以在我的笔记本上使用。
| 归档时间: |
|
| 查看次数: |
4414 次 |
| 最近记录: |