首页 > 解决方案 > UnboundLocalError 试图从生成器内的外部闭包访问变量

问题描述

我对 Python 很陌生,但我正在尝试实现我的“行文件阅读器”,但遇到了一个错误,我不明白为什么它不起作用。

UnboundLocalError:分配前引用的局部变量“i”

生成器可以看到file闭包中的变量就好了,为什么看不到i

import contextlib


@contextlib.contextmanager
def myOpen(name):
    file = open(name)
    i = 0
    try:

        def wrappedFileGen():
            for line in file:
                i = i + 1 #<-- UnboundLocalError: local variable 'i' referenced before assignment
                print('Line:', i)
                yield line

        yield wrappedFileGen()

    finally:
        print('Total lines read:', i)
        file.close()


with myOpen('test.txt') as file:
    for line in file:
        print('Content:', line)
        # raise "Oops"

如果我i在生成器中声明它可以工作

        def wrappedFileGen():
            i = 0 #<---- HERE
            for line in file:
                i = i + 1
                print('Line:', i)
                yield line

我需要i在外部范围内,因为我想完成它

标签: pythonclosuresgenerator

解决方案


推荐阅读