python中意外的关键字参数单击

python中意外的关键字参数单击,python,python-click,Python,Python Click,我在使用python click library(python版本2.7.11,windows 10,click版本6.6)时遇到此错误: 我能做些什么来修复这个错误?我做了一些挖掘。有时,最好的查找位置是出现错误的代码: 因此,我认为您需要设置allow\u extra\u args=True或resilive\u parsing=True 默认情况下,它们是: if args and not ctx.allow_extra_args and not ctx.resilient_parsing

我在使用python click library(python版本2.7.11,windows 10,click版本6.6)时遇到此错误:


我能做些什么来修复这个错误?

我做了一些挖掘。有时,最好的查找位置是出现错误的代码:

因此,我认为您需要设置
allow\u extra\u args=True
resilive\u parsing=True

默认情况下,它们是:

if args and not ctx.allow_extra_args and not ctx.resilient_parsing:
    ctx.fail('Got unexpected extra argument%s (%s)'
             % (len(args) != 1 and 's' or '',
                ' '.join(map(make_str, args))))


如果您愿意,可以通过注释这一个来测试它,我打赌您得到的错误将来自
annotate\u date
(下一个字母顺序)

您似乎试图从\u nc或
plot\u glm>调用
plot\u map\u,代码中的实际参数如下所示:

resilient_parsing=False, allow_extra_args=None,
这将生成与您得到的相同的错误消息

plot_map_from_nc(any_time_data=False)
plot_glm(any_time_data=False)
来自nc的
plot\u map\u的类型是
click.core.Command
,传递给它的每个参数都将重定向到
click.core.Command.main()

解决方案 调用这些可调用对象的正确方法是

plot_map_from_nc(args=None, prog_name=None, complete_var=None, standalone_mode=True, **extra)
如果要在代码中正常使用
plot\u map\u from\u nc
,请使用其他名称定义它:

plot_map_from_nc(sys.argv[1:]) # or
plot_map_from_nc()

我想添加到@gdlmx的答案中,因为我试图从他们的答案中运行代码,但遇到了一些错误,需要花一点时间来解析。我想加上这个作为一个评论,但不幸的是我没有足够的因果报应

此块中的代码将在最后一行引发错误:“SyntaxError:无效语法”

def __plot_map_from_nc__(... , any_time_data=True, ...):
    do_your_job_here
# create an alias
plot_map_from_nc = __plot_map_from_nc__ 
# pass this alias to click
@plot_glm.command()
@click.argument('path_nc') # ...
@click.option('--xaxis_min', default=0.0, help='') # ...
plot_map_from_nc

# Now  plot_map_from_nc becomes a   'click.core.Command'   object  while
# __plot_map_from_nc__ is still a normal function which can be invoke as
__plot_map_from_nc__(... , any_time_data=True, ...)
对这一点起作用的是:

def __plot_map_from_nc__(... , any_time_data=True, ...):
    do_your_job_here
# create an alias
plot_map_from_nc = __plot_map_from_nc__ 
# pass this alias to click
@plot_glm.command()
@click.argument('path_nc') # ...
@click.option('--xaxis_min', default=0.0, help='') # ...
plot_map_from_nc

基本上,这个传统的decorator定义为您提供了一个define块来使用@decorator语法。老实说,这可能不是处理此问题的最佳方法,但由于click使用了太多的装饰程序来设置CLI,因此使用传统语法添加所有命令是不合理的。

请从示例代码中删除与“任意时间数据”选项无关的所有选项,并检查语法,我不知道这会有什么帮助。我希望保留其他选项。这会有所帮助,因为其中一些选项已绑定到第三个模块,执行时发生的第一件事是语法错误,然后是名称错误,而不是您得到的类型错误。无法在单击6.6、python2.7.10、win7时重现错误消息。但我观察到另一个错误:
plt.cm.RdBu
是一个绑定方法,它只接受一个参数。因此,应该将其更改为
lambda:plt.cm.RdBu(10)
。修复此问题后,您的代码在我的计算机上正常运行。
any\u time\u data
决不能转到
\uuuu init\uuu
构造函数。我不知道这是怎么在你的机器上发生的。如果您发布错误消息的完整回溯,可能会有所帮助。谢谢@busfault,我收到的错误消息与您找到的错误消息不同。我的错误是
得到了一个意外的关键字参数
,而不是
得到了意外的额外参数
。同时,注释掉你建议的行并不能消除错误。谢谢!抱歉搞砸了!感谢@busfault,感谢您的关注,我真的很感激回顾操作代码,他有:
def plot\u map\u from\u nc(path_nc,out_path,var_name,xaxis_min=0.0,xaxis_max=1.1,xaxis_step=0.1,annotate_date=False,yr=0,date=-1,xlabel='',title='',tme_name=time',show_plot=False,any time_time_data=True,format='.2f',land bg=True,cmap=plt.cm.RdBu grid=False,fill_=False)
语法错误(即非
def foo(条形):
)或者,正如您在回答中所建议的那样,正在使用参数调用来自\u nc的
plot\u map\u
。@busfault:您是对的,操作代码甚至不会编译。因此我认为操作没有在此处发布完整脚本。错误可能是由于他/她的代码缺少部分。谢谢@gdlmx,我这样调用:
plot\u map\u from\u nc(…,any_time_data=False,…)
。将更改为您的建议并检查这是否正确-而不是reddit-我们使用“rep”而不是“karma”:-)
plot_map_from_nc(sys.argv[1:]) # or
plot_map_from_nc()
def __plot_map_from_nc__(... , any_time_data=True, ...):
    do_your_job_here
# create an alias
plot_map_from_nc = __plot_map_from_nc__ 
# pass this alias to click
@plot_glm.command()
@click.argument('path_nc') # ...
@click.option('--xaxis_min', default=0.0, help='') # ...
plot_map_from_nc

# Now  plot_map_from_nc becomes a   'click.core.Command'   object  while
# __plot_map_from_nc__ is still a normal function which can be invoke as
__plot_map_from_nc__(... , any_time_data=True, ...)
def __plot_map_from_nc__(... , any_time_data=True, ...):
    do_your_job_here
# create an alias
plot_map_from_nc = __plot_map_from_nc__ 
# pass this alias to click
@plot_glm.command()
@click.argument('path_nc') # ...
@click.option('--xaxis_min', default=0.0, help='') # ...
plot_map_from_nc
#define your original function
def __plot_map_from_nc__(... , any_time_data=True, ...):
    do_your_job_here
#put @ decorator on a regular decorator expression
@plot_glm.command()
@click.argument('path_nc') # ...
@click.option('--xaxis_min', default=0.0, help='') # ...
def plot_map_from_nc(... , any_time_data=True, ...):
    __plot_map_from_nc__(... , any_time_data=True, ...)