为什么 python 在函数内部引入新变量时给我一个未绑定的局部错误?

Why is python giving me an unbound local error on introducing new variable inside function?

x = int(input("Enter the input in seconds "))

def checkSeconds(x):
    
    if x >= 86400:
        d = x/86400
        x = x%86400
        
    if x >= 3600:
        h = x/3600
        x = x%3600
        
    if x >= 60:
        m = x/60
        x = x%60
        
    s = x
    
    print(d, ":", h, ":" , m, ":", s)
    
checkSeconds(x)

错误:“UnboundLocalError:赋值前引用了局部变量 'd'”

请耐心等待,因为我是初学者并且还在学习。它说“赋值前引用的局部变量 'd'”。请让我知道如何修复此错误。

问题是你每次都打印变量 d,但它只有在 x >= 86400 时才会被定义,在其他情况下变量 d 不存在因此引发 UnboundLocalError 异常。

其余变量也会发生同样的情况。

一个简单的解决方案是预先为所有这些设置默认值。

def checkSeconds(x):
    d, h, m, s = 0, 0, 0, 0

dhx 需要值,即使它们对应的条件(if 语句)不正确。

我还想在示例中向您展示一些其他内容。

我做的第一件事是将除法运算得到的商转换为整数。否则在此代码中,小时、分钟和秒还将包含您实际想要的小数部分。

我在这里做的第二件事是取出 input 调用并将其替换为下面的几个硬编码值。这样我就不用一遍又一遍地输入数据,取而代之的是一些简单的测试用例,可以验证代码是否为我工作。许多新程序员喜欢使用键盘与 运行ning 代码交互。这并没有错,在学术界要求学生在 运行 时间输入值是很常见的,也许只是为了强调代码的行为是 动态 的观点。但在现实世界中,实际提示对程序进行交互式输入是非常不寻常的,主要是因为它不方便并且容易出现数据输入错误或不一致。这是一个观点,我只是想让你考虑一下。

一旦我这样做了,我就能够定义一些值来测试几个不同的场景。

0:none个条件匹配 59:none个条件匹配 121: 只有分钟条件匹配 3662:时分秒匹配。 882221:所有单位匹配。

通过这些更改,我们现在可以 运行 代码并得到我们想要的数字

def checkSeconds(x):
    if x >= 86400:
        d = int(x/86400)
        x = x%86400
    else:
      d = 0

    if x >= 3600:
        h = int(x/3600)
        x = x%3600
    else:
      h = 0

    if x >= 60:
        m = int(x/60)
        x = x%60
    else:
      m = 0

    s = x

    print(d, ":", h, ":" , m, ":", s)

for x in [ 0, 59, 121, 3662, 882221 ]:
  checkSeconds(x)

而且由于我对测试用例进行了硬编码,因此很容易使我的结果可重现。

$ python3 ./t.py
0 : 0 : 0 : 0
0 : 0 : 0 : 59
0 : 0 : 2 : 1
0 : 1 : 1 : 2
10 : 5 : 3 : 41