格式化局部变量时出错

2024-04-27 22:47:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我面对的是一个我无法解释或理解的问题。 我有一个笔记本,其中我在单元格中定义了一个变量PREFIX

PREFIX = "/home/mavax/Documents/info/notebook/log_study"

这只是一个包含日志的文件夹的路径,所以使用笔记本的人如果想执行下面的代码,只需要更改路径。在

然后,后来(下面有一堆细胞),我毫无疑问地使用了它:

^{pr2}$

然后我得到我期望的输出,这意味着找到了文件,并且正在打印来自日志的(非常长的)输出。在

我有更多的单元格描述我为这个问题实现的结构,当再次执行同一段代码时,我得到KeyError

导致错误的代码:

def demo_synthetic_dig_dag(data_size):
    for basename in ["alert_converted_trimmed.txt"]:
        ###
        entries = load_log_for_insertion("%(PREFIX)s/datasets/logs/%(basename)s" % locals())[:data_size]
        g = AugmentedDigDag()
        g.build(entries)

        html(
            """
            <table>
                <tr><td>%s</td></tr>
            </table>
            """ % (
                synthetic_graph_to_html(g, 2, 0.03)
            )
        )

在下一个牢房里:

demo_synthetic_dig_dag(200)

Jupyter输出:

---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-179-7c2a79d0afd6> in <module>()
----> 1 demo_synthetic_dig_dag_armen(200)

<ipython-input-178-d17f57de3c01> in demo_synthetic_dig_dag(data_size)
     18     for basename in ["log_converted_trimmed.txt"]:
     19         ###
---> 20         entries = load_log_for_insertion("%(PREFIX)s/datasets/logs/%(basename)s" % locals())[:data_size]
     21         g = AugmentedDigDag()
     22         g.build(entries)

KeyError: 'PREFIX'

我很确定这个错误很简单,很愚蠢,但是,如果有人能睁开我的眼睛,我会非常感激的!在


Tags: 代码inlogfordatasizeprefixdemo
1条回答
网友
1楼 · 发布于 2024-04-27 22:47:03

在函数之外,locals()globals()相同,因此没有问题。在

但是,当放入函数中时,locals()无论如何都不包含PREFIX(它存储在globals()中,它包含该函数的本地名称。这就是格式化这些失败的原因,它试图从locals()dict返回的字典中获取一个名为PREFIX的键

与其用%格式化,不如使用.format

"{}/datasets/logs/{}s".format(PREFIX, basename)

或者,您可以在局部作用域中引入PREFIX,并在函数中附加一个参数:

^{pr2}$

但我不认为这有什么好处。(是的,本地查找有一个小的性能提升,但我怀疑它是否能起到作用)

相关问题 更多 >