TypeError:看起来nargs设置为与复合类型arity冲突

2024-04-25 19:07:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我写这个简短的小程序是为了自学Python的面向对象设计。但我现在得到了一个非常令人困惑的错误。在

  Traceback (most recent call last):
  File "main.py", line 97, in <module>
  cli()
  File "C:\Python27\lib\site-packages\click\core.py", line 716, in __call__
  return self.main(*args, **kwargs)
  File "C:\Python27\lib\site-packages\click\core.py", line 695, in main
  with self.make_context(prog_name, args, **extra) as ctx:
  File "C:\Python27\lib\site-packages\click\core.py", line 620, in make_context
  self.parse_args(ctx, args)
  File "C:\Python27\lib\site-packages\click\core.py", line 874, in parse_args
  value, args = param.handle_parse_result(ctx, opts, args)
  File "C:\Python27\lib\site-packages\click\core.py", line 1390, in handle_parse_result
  value = self.full_process_value(ctx, value)
  File "C:\Python27\lib\site-packages\click\core.py", line 1675, in full_process_value
  return Parameter.full_process_value(self, ctx, value)
  File "C:\Python27\lib\site-packages\click\core.py", line 1359, in full_process_value
  value = self.process_value(ctx, value)
  File "C:\Python27\lib\site-packages\click\core.py", line 1349, in process_value
  return self.type_cast_value(ctx, value)
  File "C:\Python27\lib\site-packages\click\core.py", line 1332, in type_cast_value
  return self.type(value or (), self, ctx)
  File "C:\Python27\lib\site-packages\click\types.py", line 38, in __call__
  return self.convert(value, param, ctx)
  File "C:\Python27\lib\site-packages\click\types.py", line 472, in convert
  raise TypeError('It would appear that nargs is set to conflict '
  TypeError: It would appear that nargs is set to conflict with the composite type arity.

此错误由基于click的CLI引发。这很奇怪,因为引发错误的选项之一没有任何参数。在

^{pr2}$

我已经为这个回溯挣扎了一天,但没有结果。有什么建议吗?谢谢!在

编辑:我修复了它,但是我在这个过程中创建了一个逻辑错误。在

default=(None, None, None, None, None, None))

我在click选项new_profile中添加了这个参数。但当你用其他的论点时,它就会运行

Profile.new_profile(None, None None, None, None None)

因此在.profile中创建一个名为none.json的新文件,所有值都为null。所以我想我从技术上解决了这个问题,但我创造了一个更大的问题。在


Tags: inpycoreselfnonevaluelibpackages
1条回答
网友
1楼 · 发布于 2024-04-25 19:07:53

有几种方法可以解决这个问题。在

不要使用click.Tuple

Tuple用于非统一类型的多值参数。由于您使用的是6个字符串,因此可以更简单地使用:

@click.option(' new_profile', '-n',
              nargs=6,
              type=str,
              ....

click.Tuple与默认值一起使用

正如您所发现的,如果指定默认值,则可以使用click.Tuple。在

^{pr2}$

然后您可以确认您没有获得默认值,例如:

if new_profile and None not in new_profile:
    # create a new profile
    ....

相关问题 更多 >