Atom中Hydrogen运行argparse代码报错:无法识别参数-f
在Atom Hydrogen中运行argparse代码报错的原因与解决办法
我来帮你搞定这个问题!我之前在Hydrogen里用argparse也碰到过一模一样的报错,太懂这种崩溃感了😂
为什么会出现这个错误?
Hydrogen是依托ipykernel来运行代码的,当它启动内核的时候,会自动给命令行加上一个-f参数,用来和Atom前端建立通信连接。但你的argparse代码完全没处理这个额外的参数,所以解析器就会把它当成不认识的输入,直接抛出unrecognized arguments: -f的错误。
解决办法有三种,你可以根据自己的需求选择:
1. 快速测试用:直接传入空参数列表
如果你只是想验证argparse的基本功能,不需要实际传递命令行参数,那最简单的办法就是给parse_args()传个空列表,这样它就会忽略掉ipykernel自动加的那些参数:
import argparse parser = argparse.ArgumentParser() parser.parse_args([]) # 传入空列表跳过外部参数解析
2. 兼容Hydrogen同时保留argparse功能:忽略未知参数
如果你需要在Hydrogen里正常运行,同时以后在命令行里用这段代码也能正常解析参数,那可以用parse_known_args()代替parse_args(),它会把无法识别的参数(比如Hydrogen的-f)单独拎出来,不会触发报错:
import argparse parser = argparse.ArgumentParser() # 这里可以添加你的自定义参数,比如:parser.add_argument("--input", help="输入文件路径") args, unknown = parser.parse_known_args() # unknown变量会包含Hydrogen的-f参数,你不用管它就行
3. 手动过滤掉Hydrogen的专属参数
另一种方式是手动过滤掉sys.argv里的-f相关参数,再传给argparse:
import argparse import sys # 过滤掉-f以及它后面跟着的通信文件路径参数 filtered_args = [] skip_next = False for arg in sys.argv[1:]: if arg.startswith('-f'): skip_next = True continue if skip_next: skip_next = False continue filtered_args.append(arg) parser = argparse.ArgumentParser() # 添加你的自定义参数定义 args = parser.parse_args(filtered_args)
这样不管是在Hydrogen里调试代码,还是以后用命令行运行脚本,都能正常工作啦。
内容的提问来源于stack exchange,提问作者Josef Ondrej
相关产品推荐
相关产品推荐

