2017-05-31 52 views
0

PyCharm提醒我变量category可以在赋值之前被引用,但我不这么认为。PyCharm:finally块中的变量可能在赋值之前被引用?

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

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

enter image description here

你觉得呢?这是真的还是它的错误?

+0

也许是一个错误。我会看到如果在尝试删除警告之前将None分配给类别。 'except'下划线是什么? –

回答

2

也许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子句中的例外,一直没有 除外条款通过处理(或者它有occurr编辑在except或 子句中),它将在finally子句执行后重新生成。

+0

这似乎是可能的原因。 Pycharm正在想“如果try在第一次赋值之前产生一个异常,那么'except'在第二次赋值之前也会引发一个异常,那么'if if not category'将会失败。 – Kevin

相关问题