在赋值错误之前引用的变量,即使在使用全局变量之后也是如此

2024-04-18 22:55:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我在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和u是列表

我的IDE(PyCharm)在将鼠标悬停在变量“c”行“print(c)”上时发出警告“Variable referenced before assignment”

输出打印为 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 二

python又一次停止了工作

有人能建议我如何解决这个问题吗。你知道吗

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

例如

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


Tags: 函数代码self列表lenifdefcode
2条回答
    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可能是未定义的。你知道吗

问题在于:

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

首先,条件(len(k) / 3 < len(u))是相同的,elif永远不会被执行。出现unused variable条件是因为这两个arm都不能执行;然后c是未定义的。使用一个else块来捕获它,例如通过提升ValueError。你知道吗

相关问题 更多 >