我偶然发现了一种情况,它阻碍了我对 Python 变量范围的理解。
代码如下:
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
如果没有赋值,一个名字被认为是非本地的,你不需要标记它。
关于python - 另一个 UnboundLocalError : local variable referenced before assignment Issue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18280452/