【问题标题】:Got multiple Arguements in one function call but not in another function call在一个函数调用中有多个参数,但在另一个函数调用中没有
【发布时间】:2021-01-08 13:15:31
【问题描述】:

我正在研究机器人框架,我的一个基本方法是用 python 编写的,用于构建一个包含 n 列和多个 where 条件的 SQL 查询。函数看起来像,

from pypika import Query, Table, Field
def get_query_with_filter_conditions(table_name, *column, **where):
    table_name_with_no_lock = table_name + ' with (nolock)'
    table = Table(table_name_with_no_lock)
    where_condition = get_where_condition(**where)
    sql_query = Query.from_(table).select(
        *column
    ).where(
        Field(where_condition)
    )
    return str(sql_query).replace('"', '')

我在我的机器人关键字中将此方法称为:

Get Query With Filter Conditions    ${tableName}    ${column}    &{tableFilter}

这个函数在另外两个关键字中被调用。一方面,它工作正常。对于另一个它不断抛出错误

关键字“queryBuilderUtility.Get Query With Filter Conditions”得到了参数“table_name”的多个值。

运行良好的关键字如下所示:

Verify the ${element} in ${grid} is fetched from ${column} column in ${tableName} table from DB
    [Documentation]    Verifies Monetary values in the View Sale Grid
    ${feature}=    Get Variable Value    ${FEATURE_NAME}
    ${filterValue}=    Get Variable value    ${FILTER_VALUE}
    ${queryFilter}=    Get the Test Data    valid    ${filterValue}    ${feature}
    &{tableFilter}=    Create Dictionary
    Set To Dictionary    ${tableFilter}    ${filterValue}=${queryFilter}
    Set To Dictionary    ${tableFilter}    form_of_payment_type=${element}
    ${tableName}=    Catenate    SEPARATOR=.    SmartPRASales    ${tableName}
    ${query}=    Get query with Filter Conditions    ${tableName}    ${column}    &{tableFilter}
    Log    ${query}
    @{queryResult}=    CommonPage.Get a Column values from DB    ${query}

总是抛出错误的函数如下所示:

Verify ${element} drop down contains all values from ${column} column in ${tableName} table
    [Documentation]    To verify the drop down has all values from DB
    ${feature}=    Get Variable Value    ${FEATURE_NAME}
    ${filterElement}=    Run Keyword If    '${element}'=='batch_type'    Set Variable    transaction_type
    ...    ELSE IF    '${element}'=='channel'    Set Variable    agency_type
    ...    ELSE    Set Variable    ${element}
    &{tableFilter}=    Create Dictionary
    Set To Dictionary    ${tableFilter}    table_name=GENERAL
    Set To Dictionary    ${tableFilter}    column_name=${filterElement}
    Set To Dictionary    ${tableFilter}    client_id=QR
    Log    ${tableFilter}
    Log    ${tableName}
    Log    ${column}
    ${tableName}=    Catenate    SEPARATOR=.    SmartPRAMaster    ${tableName}
    ${query}=    Get Query With Filter Conditions    ${tableName}    ${column}    &{tableFilter}
    Log    ${query}
    @{expectedvalues}=    CommonPage.Get a Column values from DB    ${query}

有人可以帮助我纠正我在这里做的错误吗?

【问题讨论】:

  • ${tableName} ${column} &{tableFilter} 检查两个函数中所有这 3 个变量的内容,如果可能,将其添加到帖子中
  • .@Dev 对于工作关键字:${tableFilter} => {'document_no': '5088397227', 'form_of_payment_type': 'GF'}, ${tableName} => SmartPRASales.ticket_payment_details, ${column} => form_of_payment_amount。对于抛出错误的函数: ${tableFilter} => {'table_name': 'GENERAL', 'column_name': 'sales_source', 'client_id': 'QR'} , ${tableName} => SmartPRAMaster.mas_list_of_values, $ {column} => field_short_desc

标签: python-3.x parameter-passing robotframework keyword-argument positional-parameter


【解决方案1】:

问题是由于字典中的键值对引起的。字典中的键之一

&{tableFilter}=    Create Dictionary
    Set To Dictionary    ${tableFilter}    table_name=GENERAL

与中的参数之一相同

def get_query_with_filter_conditions(table_name, *column, **where):

将 get_query_with_filter_conditions 函数中的参数从 table_name 更改为 p_table_name 并且它起作用了。由于该函数采用可以指定为命名参数的位置参数,python 将我传递的 table_name 参数与字典中键 table_name 的参数混淆了。

【讨论】:

  • 您可以在 24 小时回答时间后点击答案旁边的空心勾来接受您的回答
猜你喜欢
  • 2021-08-15
  • 2017-02-17
  • 2017-03-07
  • 2019-09-17
  • 2013-12-17
  • 1970-01-01
  • 2021-06-29
  • 1970-01-01
相关资源
最近更新 更多