【问题标题】:Variable written within if/else scope is undefined outside在 if/else 范围内写入的变量在外部未定义
【发布时间】:2018-08-09 01:52:06
【问题描述】:

循环浏览 CSV 文件的内容时,我正在尝试创建开始时间和结束时间;

我知道基于row['form'] 提交的表单,我记录了这些表单的提交时间,我正在尝试创建startend 时间,以便稍后获得完成的平均时间他们的形式。

for row in rows:
    branch = Branch(row['user_id'], row['form'], row['time'])
    if branch.id == row['user_id']:
        if branch.form == 'signup':
            time = {i: {'start': branch.time}}
            print(time)
        elif branch.form == 'submit':
            time = {i: {'end': branch.time}}
            print(time)

        print(time) # line 27

上面的代码sn-p的问题是,对于条件语句的print() inside,它工作得很好;我得到了开始时间和结束时间。

但是当我尝试在条件语句之外 打印它时,它不起作用:

Traceback (most recent call last):
  File "index.py", line 27, in <module>
    print(time)
NameError: name 'time' is not defined

现在,如果我 print timefor 循环之外,那么它会给我最后一个值;我无法获得任何以前的值。

【问题讨论】:

  • branch.form 的值是多少?你确定是signup还是submit
  • @JimWright 它是str 中的表单名称。是的,signupsubmit 也在其中。
  • 我的意思是,如果它不是 signupsubmit,那么你没有定义 time
  • @JimWright 所以它不会增加到字典time(例如time[i])?那么我将如何分配值。有5种形式,我只需要第一次和最后一次。
  • 我同意。如果您将 branch.form 的所有值都使用它,请添加 else 至少以定义 time

标签: python for-loop conditional


【解决方案1】:

如果您希望“时间”变量可在多个范围内重新定义和访问,则需要使用 global 关键字。看我的回答here

希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-18
    • 2019-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 2015-08-29
    相关资源
    最近更新 更多