如何处理“赋值前的引用”中不存在的变量

时间:2019-06-09 09:57:50

标签: python

如果满足特定条件,我有一些代码可以创建变量:

if self.left: 
    left_count = self.left.isUnivalTree()

几行代码如下:

if left_count and right_count: 
    total_count = right_count + left_count

这将引发以下错误:

local variable 'left_count' referenced before assignment

我该如何解决?肯定地说出if left_count...我认为事实可能并非如此

(通过为函数中的所有参数设置默认值可以解决此错误,但我只是想知道是否有更简单的方法,因为我需要为5个参数设置默认值?)

4 个答案:

答案 0 :(得分:1)

如果self.left不是True,则没有分配,请尝试以下操作,将默认设置为None

left_count = self.left.isUnivalTree() if self.left else None

根据您的问题更新,最好在函数上设置默认参数,这正是它们的用途。

答案 1 :(得分:1)

代替:

left_count = False
if self.left: left_count = self.left.isUnivalTree()

只需使用and的短路行为:

left_count = self.left and self.left.isUnivalTree()

答案 2 :(得分:1)

如果isUnivalTree返回布尔值(由于名称的原因,它应该是):

left_count = self.left and self.left.isUnivalTree()

否则:

left_count = self.left.isUnivalTree() if self.left else None

答案 3 :(得分:0)

或捕获到NameError

ERROR: Complete output from command python setup.py egg_info:
ERROR: Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/private/var/folders/c8/w7fqpxvn2jb8gpfd3n55h2040000gn/T/pip-install-6kq682mb/mutagen/setup.py", line 29
    except EnvironmentError, err:
                           ^
SyntaxError: invalid syntax
----------------------------------------
ERROR: Command "python setup.py egg_info" failed with error code 1 in /private/var/folders/c8/w7fqpxvn2jb8gpfd3n55h2040000gn/T/pip-install-6kq682mb/mutagen/

或检查是否已定义:

struct a
{
 std::vector<int> i{ 10, 20, 30, 40 };
};

int main()
{
 a *i = // allocate
 *i = a(); // calls ctor, calls copy operator, calls dtor
               // in principle.
}

这一切都取决于最适合您的工作流程