精确定位循环中的错误和彼此之间的条件

时间:2014-02-24 21:01:08

标签: python for-loop python-3.x

我一直在研究这个程序已有一段时间了。这是解决一个错误导致新错误的原因之一。这是我最新的树桩。我有许多像这样的代码句子,只有条件变化,但第二行仍然存在。

if year % 400 == 0:
    nyear = "leapyear"

并且最后,我有这个代码,确保2月29日只存在为leapyears。这也是包含错误的代码的一部分。

elif month == 2 and nyear == "leapyear":
   if day > 29:
       date = "invalid"

导致最后一段代码,它只打印有效日期:

if date != "invalid":      
    print(day, months[month], year)
    break
else:
    continue       

我没有发布我的整个代码,因为它很长,但我仍然可以添加它,如果它会使问题更容易理解。这是我不断得到的错误,我不知道如何纠正它。

Traceback (most recent call last):
    File "C:\Python33\assgn21.py", line 103, in <module>
        main()
    File "C:\Python33\assgn21.py", line 82, in main
        elif month == 2 and nyear != "leapyear":
UnboundLocalError: local variable 'nyear' referenced before assignment

1 个答案:

答案 0 :(得分:3)

如果你只有这个:

if year % 400 == 0:
    nyear = "leapyear"
...

如果条件不满足,你永远不会设置nyear 。相反,将它设为一个标志并在两种情况下都设置它:

if year % 400:
    leapyear = False
else:
    leapyear = True

现在你可以简单地拥有:

elif month == 2 and leapyear:

同样,您应该只有date_valid = False而不是date = "invalid";它会让你的代码更清晰。