python – 另一个UnboundLocalError:在赋值问题之前引用的局部变量

我偶然发现了一个让我理解
Pythons变量范围的情况.

这是代码:

transaction_id = None


def parseFileContent(hostID,marketID, content, writeToDB=False):
    features = _buildObjects(StringIO.StringIO(content))

    for feature in features:
        featureID =  adapter.addFeature(feature.name,boris)
        print transaction_id #breaks here UnboundLocalError: local variable 'transaction_id' referenced before assignment

        transaction_id = adapter.addFeatureTransactionToQueue(featureID, result[0], result[1], Command.ADD, boris, trans_id = transaction_id)

如果我替换最后一行

       adapter.addFeatureTransactionToQueue(featureID, result[0], result[1], Command.ADD, boris, trans_id = transaction_id)

一切正常.我需要了解python不喜欢我在第一个场景中打印值.

最佳答案 如果分配给函数,Python编译器会将名称标记为函数的本地名称.您的最后一行分配给transaction_id,因此它被视为本地名称,而不是全局名称.

您需要通过使用函数内部的global关键字明确告诉编译器transaction_id是全局的:

def parseFileContent(hostID,marketID, content, writeToDB=False):
    global transaction_id

如果没有分配,则名称将被视为非本地名称,您无需对其进行标记.

点赞