【发布时间】:2017-07-12 18:10:04
【问题描述】:
如何在父 python (3.6) 函数中进一步引用 if/elif 语句中定义的变量?
例如,下面是我的代码的模型 - 我正在尝试在下面每个“if”和“elif”块中定义的变量“打印”或“使用”,在函数的末尾包含在其中定义变量的 if/elif 语句,但是当我运行代码时,我在 pycharm 中得到一个未解决的引用错误和以下 python 错误:
UnboundLocalError: local variable 'a1_summary' referenced before assignment
我对 python 和编码比较陌生,不明白我哪里出错了,因为我期望变量是在同一个函数中定义的,所以它们应该对打印语句末尾的 print 语句“可见”函数...
这种情况应该使用全局变量吗?
def Process_Data(incoming_data):
if incoming_data.count(',') == 2:
data_summary = incoming_data.split(',')
a1_summary, b1_summary = data_summary[0], data_summary[1]
elif incoming_body.count(',') == 3:
data_summary = incoming_data.split(',')
a2_summary, b2_summary, c2_summary = data_summary[0], data_summary[1], data_summary[2]
print(a1_summary, b1_summary, a2_summary, b2_summary, c2_summary )
else:
pass
非常感谢任何帮助或建议 - 谢谢。
更新到上述内容
我试图保持问题简单,但可能会混淆一些事情,因为我试图在处理来自 rabbitmq 消息队列的消息的函数中使用 if/elif 语句 - 我需要根据逗号的数量来处理消息在相应的消息中并将消息的部分分配给变量,然后将 if/elif 语句接收和处理的每条消息的部分聚合到一个数组中,以便稍后我可以将其传递给程序中的另一个函数。
我认为每次函数接收到与 if 或 elif 语句匹配的传入数据时,我可能会出错 - 任何与其他条件匹配的先前或新数据仍将作为变量保存在函数中,例如我在想该函数包含来自 if/elif 块的变量,并且只更新相应逻辑语句处理的任何新数据...
【问题讨论】:
-
用默认值在 if 之外定义它们,然后在 if 中重新分配它们。
-
谢谢,但我已经尝试在函数的开头定义 a1_summary = '' 和 b1_summary = '' 但是当 if/elif 语句进行处理时,这些值似乎没有得到更新 - print 语句只“打印”两个空格,然后是 a2_summary、b2_summary、c2_summary 的值。对不起,如果我在这里很厚,但你能指点一下吗?
-
只有其中一个语句会执行,因此您将拥有 a1 和 b1 或 a2、b2 和 c2。根据缩进,你的“else”语句也应该抛出错误。
-
@mauve - 谢谢 - 我想我知道哪里出错了 - 我在想这个函数会保存每个逻辑块中定义的变量的值,然后我可以在函数的结尾......我应该使用全局变量来保存这些变量作为一种解决方法 - 从我读过的内容来看,人们强烈建议不要使用 GV......
标签: python variables if-statement scope global-variables