Pyrebase 查询生成器 python-exec() 问题

问题描述

您好,我正在开发一个 Firebase 查询构建器。它基本上是一个请求属性并返回带有完整查询的字符串的函数。它必须被执行并且应该返回数据。

def Search(**kwargs):
    base="db.child('vocabulary')"

    #AMOUNT OF DATA ENTERED.
    entry_length=(len(kwargs.items()))

    #LAST ATRIBUTTE ENTERED
    last_atributte=list(kwargs.items())[entry_length-1]


    #FOR EVERY ATTRIBUTE,ADD IT TO THE ROOT. IF IT'S THE LAST->CLOSE THE QUERY
    for x,y in kwargs.items():

        if y!=last_atributte[1]:
            base+=".child('{}')".format(y)
        else:
            base+=".child('{}').get().val()".format(y)
    print(base)
    return (base)


query=Search(word_type="verbs",word="play")
print(exec(query))

在这个例子中,函数返回这个字符串: db.child('vocabulary').child('verbs').child('play').get().val()

如果我运行脚本上面的字符串,它会返回数据,但是当我使用内置的 exec() 执行它时,返回 None: print(exec(db.child('vocabulary').child('verbs').child('play').get().val()))

你有什么提示我该如何改进它?提前致谢。

解决方法

主要问题是字符串处理错误。

代替:

query=Search(word_type="verbs",word="play")
print(exec(query))

相当于:print(exec(query))。应该是:

query=Search(word_type="verbs",word="play")
query="print({})".format(query)
exec(query)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...