gpt4 book ai didi

Python read_text() 添加额外的字符串

转载 作者:行者123 更新时间:2023-12-01 08:27:27 25 4
gpt4 key购买 nike

我创建了一个函数,它接受带有动态 SQL(和参数)的文件,然后返回最终 SQL 结果。它似乎添加了额外的字符串,因为我的单元测试失败并且显示了额外的字符串。

我的功能:

def file_to_sql(filename, kwargs=None):
"""Read file and return SQL statement.

Parameters
----------
filename: str
Name of the file to read.
kwargs : dict
Keyword arguments to be passed into your SQL statement.
"""

python_dir = Path('logic/extract/python3')
python_file_path = python_dir / '{}'.format(filename)
sql = python_file_path.read_text().format(**kwargs)

return sql

我的单元测试:

def test_python_file_with_kwargs_to_sql():
sql = file_to_sql(filename="select_all_from_{table}.py", kwargs={
'table': 'sandbox.test_table'
})

assert sql == "SELECT * FROM sandbox.test_table;"

select_all_from_{table}.py:

"SELECT * FROM {table};"

单元测试失败消息:

================================== FAILURES ===================================
_____________________ test_python_file_with_kwargs_to_sql _____________________

def test_python_file_with_kwargs_to_sql():
sql = file_to_sql(filename="select_all_from_{table}.py", kwargs={
'table': 'sandbox.test_table'
})

> assert sql == "SELECT * FROM sandbox.test_table;"
E assert '"SELECT * FR....test_table;"' == 'select * from...x.test_table;'
E - "SELECT * FROM sandbox.test_table;"
E + SELECT * FROM sandbox.test_table;

tests\unit_tests\transform\test_preprocess.py:19: AssertionError
================ 1 failed, 2 passed, 4 skipped in 1.40 seconds ================

最佳答案

单元测试失败有两个原因:

  1. 您的 sql 字符串采用混合大小写(“SELECT”和“FROM”均为大写),而您的比较字符串则全部为小写。

  2. select_all_from_{table}.py 中的文本使用双引号,但您的比较字符串没有双引号。

由于 read_text() 将文件内容读取为 str,因此不需要双引号。从文件中删除双引号,为了获得良好的实践,请执行不区分大小写的测试:

sql.lower() == 'select * from sandbox.test_table'.lower()

或者只是 sql.lower() == 'select * from sandbox.test_table' 在这种特殊情况下就足够了。

对于单元测试,最好对输入和输出保持警惕,并确保测试准确。

关于Python read_text() 添加额外的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54150171/

25 4 0
文章推荐: python - HTTP 代码名称\\o/\\o- -o-/o\\在请求中代表什么?
文章推荐: jquery - 如何自定义 HTML/CSS 工具提示?
文章推荐: IE 中 上的 jQuery 单击监听器失败