【问题标题】:PyCharm: Variable in finally block might be referenced before assignment?PyCharm:finally 块中的变量可能在赋值之前被引用?
【发布时间】:2017-05-31 17:47:34
【问题描述】:

PyCharm 警告我可以在赋值之前引用变量category,但我不这么认为。

除了应该捕获每个Exception(致命错误除外)并最终在tryexcept 块之后调用。

    try:
        category = lst[2]
    except:
        category = None
    finally:
        if not category: #here
            category = self.default_category

你怎么看?这是真的还是错误?

【问题讨论】:

  • 可能是一个错误。在尝试删除警告之前,我会查看是否将 None 分配给类别。 except 的下划线是什么?

标签: python python-2.7 exception pycharm


【解决方案1】:

也许 PyCharm 看到分配时没有考虑“分配给什么”。也就是说,None 是有区别的,考虑一下你是否写了:

try:
    category = lst[2]
except:
    category = Noone
finally:
    if not category:
        category = self.default_category

(或None/1 等)然后你会得到:

NameError: name 'category' is not defined

因为如果lst 为空,则异常中会有异常:

当 try 子句发生异常并且没有被 由一个 except 子句处理(或者它发生在一个 except 或 else 子句),它会在 finally 子句执行后重新引发。

【讨论】:

  • 这似乎是可能的原因。 Pycharm 正在考虑“如果try 在第一次赋值之前引发异常,然后except 在第二次赋值之前也引发异常怎么办?那么if not category 将失败”。
猜你喜欢
  • 2017-10-13
  • 1970-01-01
  • 1970-01-01
  • 2021-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-06
  • 1970-01-01
相关资源
最近更新 更多