即使在使用全局变量python之后,在赋值错误之前引用变量

时间:2018-04-24 19:57:30

标签: python python-3.x

我在pyqt5类中的函数中使用此代码。

        print(len(k))
        print(len(u))

        if len(k) / 3 < len(u):
            c = len(k) / 3 + 1
            c = round(c, 0)
        elif len(k) / 3 < len(u):
            c = len(u) + 1

        print(c)

这里k和你是名单

我的IDE(PyCharm)发出警告&#34;在分配之前引用变量&#34;将鼠标悬停在变量&#34; c&#34; line&#34; print(c)&#34;

输出打印为 8 2 之后,python停止了工作

其中8和2是列表的长度

我尝试将函数和全局变量用作

        print(len(k))
        print(len(u))

        def getvar(a,b):
            global c
            if a / 3 < b:
                c = a / 3 + 1
                c = round(c, 0)
            elif a / 3 < b:
                c = b + 1
            return c


        print(getvar(len(k),len(u)))

这是打印 8 2

再次python停止工作

有人可以建议我如何解决这个问题。

PS所有这些代码都在pyqt5类中的函数内部

e.g。

class Ui_Dialog(object):
    def setupUi(self, Dialog):
       ...some..code..
       self.startBtn.clicked.connect(self.run)

    def run(self):
       ...some..code..

       ** code mentioned above**

我正在使用python3.6

2 个答案:

答案 0 :(得分:4)

问题在于:

    if len(k) / 3 < len(u):
        c = ...
    elif len(k) / 3 < len(u):
        c = ...

首先,条件(len(k) / 3 < len(u))是相同的,并且elif不会被执行。出现unused variable - 条件是因为两个武器都不会被执行;然后c未定义。使用可捕获该else块的ValueError块,例如通过提出{{1}}。

答案 1 :(得分:3)

    if len(k) / 3 < len(u):
        c = len(k) / 3 + 1
        c = round(c, 0)
    elif len(k) / 3 < len(u):
        c = len(u) + 1

    print(c)
首先,两个条件都是一样的! (这不应该打扰你的IDE可能无法分析那么远),但更重要的是你错过了else:,因此c 可能未定义。