我偶然发现了一个让我理解
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
如果没有分配,则名称将被视为非本地名称,您无需对其进行标记.