Python 日历库中的值太多,无法解包错误

Python 日历库中的值太多,无法解包错误,python,calendar,Python,Calendar,我试图解决“太多值无法解包”错误。 此代码尝试根据闰年和月底数打印月名。 我希望I,j中的x,y根据月末的数字给出月份名称 import calendar year=2000 a=calendar.isleap(year) if a ==False : print('this is not a leap year') x=[0,31,59,90,120] y=[31,59,90,120,151] for i,j in zip(x, y):

我试图解决“太多值无法解包”错误。 此代码尝试根据闰年和月底数打印月名。 我希望I,j中的x,y根据月末的数字给出月份名称

import calendar
year=2000
a=calendar.isleap(year)
if a ==False :
    print('this is not a leap year')
    x=[0,31,59,90,120]
    y=[31,59,90,120,151]

    for i,j in zip(x, y):
                        if (i,j) == (0,31):
                            (i,j)=str('Jan')
                        if (i,j) == (31,59):
                            (i,j)=str('Feb')
                        if (i,j)==(59,90):
                            (i,j)=str('March')
                        if (i,j)==(90,120):
                            (i,j)=str('Apr')
                        if (i,j)==(120,151):
                            (i,j)=str('May')

                            print('Mont_'+ (x,y))

else: 
    print ('This is a leap year')
    x=[0,31,60,91,121,152]
    y=[31,60,91,121,152,182]
    for i,j in zip(x, y):
                        if (i,j) == (0,31):
                            (i,j)=str('Jan')
                        if (i,j) == (31,60):
                            (i,j)=str('Feb')
                        if (i,j)==(60,91):
                            (i,j)=str('March')
                        if (i,j)==(91,121):
                            (i,j)=str('Apr')
                        if (i,j)==(121,152):
                            (i,j)=str('May')
                        if (i,j)==(152,182):
                            (i,j)=str('Jun')
                            print('Mont_'+ (x,y))
当您使用类似于
(i,j)=str('Jan')
的任何东西时,就会发生错误。当您同时分配多个变量时,您要问的是“将我的列表/元组/字符串的内容按该顺序拆分为变量v1、v2、v3、…、vn”。具体来说,在本例中,您要求Python将一个由3个字符组成的字符串(例如,
'Jan'
拆分为两个变量)。Python不知道如何处理这个问题

从您的代码来看,我认为您实际上想要这样的东西:

print ('This is a leap year')
x=[0,31,60,91,121,152]
y=[31,60,91,121,152,182]
for i,j in zip(x, y):
    if i,j == 0,31:            # The parenthesis aren't necessary> Python implicitly converts this to a tuple
        month='Jan'            # Same with the string. No need to explicitly declare it a string - Python is very clever :)
    elif (i,j) == (31,60):
        month='Feb'
    elif (i,j)==(60,91):
        month='Mar'
    elif (i,j)==(91,121):
        month='Apr'
    elif (i,j)==(121,152):
        month='May'
    elif (i,j)==(152,182):
        month='Jun'
    else:
        month='n/a'

    print('Mont_'+ month)
还要注意在第一个
if
之后使用
elif
。在这种情况下,结果是相同的,使用
elif
作为绑定剂将整个块分组在一起

以下面的例子为例

a = 'string'
if a == 'string':
    a = some_function()
if a == 'int':
    a = some_other_function()

如果由于某种原因,
some\u function()
返回值
'int'
,则在该代码块之后,
a
将具有
some\u other\u function()
的返回值。在这里使用
elif
可以防止调用
some_函数()
some_other_函数()

您应该将堆栈跟踪添加到日志中