2016-04-22 53 views
0

我試圖從robotframework關鍵字調用python函數。 python函數已被修飾爲使用Builtin庫中的run_keyword進行調用。這是因爲機器人日誌顯示結構良好,如果庫函數是通過內置庫中的run_keyword函數調用的。而不是直接調用。但是這會導致無限循環。有沒有一個解決方案來優雅地完成目標?從robotframework腳本調用裝飾的python函數導致無限遞歸

robotkeyword : 

do something 
#creates a user by calling a function from python based library 
create user 

python function 
@wrap_with_run_keyword 
def create_user(): 
    pass 

def wrap_with_run_keyword(func): 
    def func_wrapper(*args, **kwargs): 
     return run_keyword(func, *args, **kwargs) 
    return func_wrapper 

我無法使用部分應用程序解決問題。

但是,我通過設置和取消設置下面給出的屬性來代理遞歸循環。

def wrap_with_run_keyword(func): 
def func_wrapper(*args, **kwargs): 
    if not hasattr(func, 'second'): 
     setattr(func, "second", True) 
     return run_keyword(func, *args, **kwargs) 
    else: 
     delattr(func, "second") 
     return func(*args, **kwargs) 

return func_wrapper 

但是我遇到了另一個問題。我定義create_user如下

def create_user(properties): 
    #some code 
    pass 

在調用下面

create_user("name=abc") 

的方式這個功能,我發現了以下錯誤:得到了一個意想不到的關鍵字參數「名」

+0

爲什麼在調用關鍵字「創建用戶」時調用關鍵字「創建用戶」?你已經創建了一個自己調用的關鍵字。您是否打算創建一個_new_關鍵字,從其他庫中調用_an existing_關鍵字? 「結構良好」是什麼意思?如果您通過「run keyword」直接調用關鍵字,那麼在日誌中應該沒有區別,除非在後一種情況下您有一個額外的嵌套級別。 –

+0

@BryanOakley日誌的形成方式有所不同。如果你從機器人調用庫關鍵字,它看起來很好嵌套。但是,如果您的圖書館進一步調用另一個函數/關鍵字,它會在同一級別平坦。但是,如果您通過運行關鍵字從另一個庫調用另一個庫函數,則嵌套也會出現在樹中的某種樹中,使其更具可讀性。 – decoder

回答

-2

看看在functools模塊的partial類中。我認爲這可能會幫助你。

take a look at how decorators work in python

+0

儘管這個鏈接可能回答這個問題,但最好在這裏包含答案的重要部分,並提供供參考的鏈接。如果鏈接頁面更改,則僅鏈接答案可能會失效。 - [來自評論](/ review/low-quality-posts/12108573) – Oz123

+0

我明白了。我會牢記這一點 – salomonderossi