为啥我会收到“'If' is a reserved keyword”错误?

Posted

技术标签:

【中文标题】为啥我会收到“\'If\' is a reserved keyword”错误?【英文标题】:Why am I getting "'If' is a reserved keyword" error?为什么我会收到“'If' is a reserved keyword”错误? 【发布时间】:2021-07-27 08:12:48 【问题描述】:

这是我第一次尝试在机器人框架中使用 IF 条件,我发现它非常困难。我的测试失败并显示以下消息:'If' is a reserved keyword。嗯,是的——我想使用那个关键字!

这是相关代码的sn-p。

    # Column lookup using $heading
    @heading_list  Create List
    @header_element_list  Get WebElements  $table_headers_locator
    FOR  $element  IN  @header_element_list
        Append To List  $heading_list  $element.text
    END
    $col  Get Index From List  $heading_list  $heading
    IF  $col < 0
        Fail  Heading '$heading' not found in table.
    END

我在 PyCharm 中工作,使用机器人框架代码语法高亮插件。该插件似乎也认为 IF 条件有问题;请注意,它的关键字是浅蓝色的,而紧接其上方的 FOR 循环中的关键字是橙色的。

我相信我的 IF 语句符合最简单的 IF 语句示例,如此处的 Robot Framework 文档所示:https://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html#advanced-features。请帮助我理解为什么不是这样。谢谢!

【问题讨论】:

插件好像没有更新支持robot 4.x sintax 是正确的,请确保 "IF" 和条件之间有 3 个空格。如果涵盖了这一点,请尝试在不使用 python 的情况下直接使用命令行执行:“robot script.robot”以确保没有其他返回错误 【参考方案1】:

Bryan Oakley 写道:“看起来该插件尚未更新以支持机器人 4.x”,这让我更深入地挖掘。我雇主的自动化团队指定了 Robot 3.1.2!这不是我能改变的。

在线文档指出 IF 表达式已添加到 Robot 4.0 中的语言中。因此,我对 IF 语句的语法高亮显示与我的预期不一致是正确的——因为 Robot 3.x 不会以这种方式处理条件语句。

就个人而言,我觉得奇怪的是,像 IF 表达式这样基本的东西实际上是一种尖端的语言功能。但是,在了解 Robot 3.x 的限制后,我将设计一个解决方法。

【讨论】:

机器人并非设计为通用编程语言。可以论证测试不应该需要条件逻辑。当然,在实践中我们发现有时需要,如果不是在测试中,那么在测试使用的关键字中。对于机器人 3.x,可以使用诸如 run keyword if 之类的关键字。不幸的是,这些关键字不像新的IF 语法那样易于使用。 @BryanOakley 我想我可以看到测试不应该是有条件的想法背后的逻辑。但是,我还可以看到机器人 Get Index from List 关键字是 Python list.find() 方法的包装器,如果找不到该项目,则返回 -1。在我的例子中,我在后续调用 Table Cell Should Contain 时使用该列号,它接受 Python 负索引。所以我必须捕获-1。

以上是关于为啥我会收到“'If' is a reserved keyword”错误?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我会收到 CancelledKeyException?

为啥我会收到此错误

为啥我会收到这个 TypeError?

为啥我会收到序列化错误?

为啥我会收到错误消息?

知道为啥我会收到此错误吗?