为什么我的局部变量在被有条件地分配时被称为未分配?

时间:2013-10-31 03:32:39

标签: variables python-3.x local

def get_date(date):
month = date[4:7] 
if month == "01":
    month_string = "January"
elif month == "02":
    month_string = "February"
elif month == "03":
    month_string = "March"
elif month == "04":
    month_string = "April"
elif month == "05":
    month_string = "May"
elif month == "06":
    month_string = "June"
elif month == "07":
    month_string = "July"
elif month == "08":
    month_string = "August"
elif month == "09":
    month_string = "September"
elif month == "10":
    month_string = "October"
elif month == "11":
    month_string = "November"
elif month == "12":
    month_string = "December"
return month_string

变量'date'是yyyy / mm / dd形式的输入字符串。

此函数测试输入yyyy / mm / dd中的月份是否为其中一个数字,并为该数字值指定一个字符串。这个决策结构不应该为month_string赋值吗?我不明白为什么不是。

2 个答案:

答案 0 :(得分:1)

制作本:

def get_date(date):
    month = date[5:7]
    month_string = None
    ...

date[5:7]mm部分,而date[4:7]/mm

此外,month_string = None处理月份无效的情况。

答案 1 :(得分:1)

在分配本地变量之前引用它的原因是因为在每种情况下都没有分配month_string。您分配的最后一个案例是elif语句。由于Python不知道您的输入值只是那几个月,因此无法评估并绝对确定在month_string语句之前正确分配了return

您可以在第一个month_string = None声明之前写下if

def get_date(date):
month = date[5:7]
month_string = None
if month == "01":
    month_string = "January"
...