Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 带Kwargs的嵌入参数_Python 3.x_Robotframework - Fatal编程技术网

Python 3.x 带Kwargs的嵌入参数

Python 3.x 带Kwargs的嵌入参数,python-3.x,robotframework,Python 3.x,Robotframework,是否有一种方法可以嵌入参数,并将KWARG传递给函数 例如: 机器人文件 Testcase1 do something "value" extra_args=bla Python库 @keyword('do something "${value}"') def do_something(self, value, **kwargs): print(value) print(kwargs) 尽管上述方法不起作用。我也试过了 Testcase1 do somethi

是否有一种方法可以嵌入参数,并将KWARG传递给函数

例如:

机器人文件

Testcase1
    do something "value" extra_args=bla
Python库

@keyword('do something "${value}"')
def do_something(self, value, **kwargs):
    print(value)
    print(kwargs)
尽管上述方法不起作用。我也试过了

Testcase1
    do something "value"    extra_args=bla

还有许多其他的组合。我在Robotframework中发现了pull请求,其中添加了此限制,但我确信其他库编写人员一定想要此功能


感谢Robot框架文档中的介绍,第节对此进行了描述

Robot Framework 2.8添加了对免费关键字参数的支持,使用 Python的**kwargs语法。如何在测试数据中使用语法是 在“创建测试用例”下的“自由关键字参数”部分中讨论。 在本节中,我们将了解如何在定制中实际使用它 测试库

这是Python示例:

def various_args(arg, *varargs, **kwargs):
    print 'arg:', arg
    for value in varargs:
        print 'vararg:', value
    for name, value in sorted(kwargs.items()):
        print 'kwarg:', name, value
以及相应的Robot文件:

*** Test Cases ***
Positional
    Various Args    hello    world                # Logs 'arg: hello' and 'vararg: world'.

Named
    Various Args    arg=value                     # Logs 'arg: value'.

Kwargs
    Various Args    a=1    b=2    c=3             # Logs 'kwarg: a 1', 'kwarg: b 2' and 'kwarg: c 3'.
    Various Args    c=3    a=1    b=2             # Same as above. Order does not matter.

Positional and kwargs
    Various Args    1    2    kw=3                # Logs 'arg: 1', 'vararg: 2' and 'kwarg: kw 3'.

Named and kwargs
    Various Args    arg=value      hello=world    # Logs 'arg: value' and 'kwarg: hello world'.
    Various Args    hello=world    arg=value      # Same as above. Order does not matter.

简短回答-不,这是不允许的

仔细想想,我可以看出这一限制来自何处——如果在带有嵌入参数的关键字中支持kwargs,解析器将很难使用,主要是在两个方面:

  • 在哪里将参数分解为单独的变量
在此示例代码中:

My keyword @{kwarg} varies
    Pass Execution
,当这样称呼时:

My keyword was called varies
My keyword one argument
,参数应该是什么?一个值
的参数被称为
,或者两个值
的参数被称为
,而
的参数被称为

  • 匹配目标关键字
另一个示例关键字定义:

My keyword @{kwarg}
    Pass Execution

My keyword ${normal} argument
    Pass Execution
,当这样称呼时:

My keyword was called varies
My keyword one argument
,解析器应该匹配这两个关键字中的哪一个

正如您所看到的,嵌入语法中的kwargs会导致问题,这可能只是冰山一角


旁注-虽然我个人觉得嵌入参数的关键字很酷-你可以打电话,看起来像简单的英语!几乎没有其他语言给你这种可能性!,通过实践,我发现它们是有限的,现在我试着避免它们。

两个原因-您以后不能更改此类关键字的签名,例如添加可选参数(或kwargs;))。第二个是参数总是作为字符串对象传递-因此,如果它处理另一种类型,您必须将它们强制转换为关键字,并且忘记传递复杂的对象类型。

感谢您的关注,尽管这不是使用“嵌入参数”和@keywords,而是更典型的4空格方式。我正在寻找一种方法来实现这一点与嵌入式。感谢您的回复和确认,这是不可能的!