Python 3.x 如果输入格式错误,则返回无效的函数

Python 3.x 如果输入格式错误,则返回无效的函数,python-3.x,Python 3.x,我编写了一个函数,可以读取数据帧,并将一周(1-7)转换为(周一到周日),将月份(1-12)转换为季节(夏天到春天),将时间(00:00:00-23:59:00)转换为(早上、下午、晚上、晚上) 注意:我已经完成了这个部分,我只需要添加代码来执行下面的操作 各列中都有包含“未知”的行。如果我的函数试图转换任何输入(日、月、时间)格式不正确(即它们包含未知)的行,则需要在所有输出中返回“无效”。我可以在现有代码中添加什么来实现这一点?我还需要能够过滤出这些无效的条目以后。任何帮助/建议都将不胜感激

我编写了一个函数,可以读取数据帧,并将一周(1-7)转换为(周一到周日),将月份(1-12)转换为季节(夏天到春天),将时间(00:00:00-23:59:00)转换为(早上、下午、晚上、晚上) 注意:我已经完成了这个部分,我只需要添加代码来执行下面的操作

各列中都有包含“未知”的行。如果我的函数试图转换任何输入(日、月、时间)格式不正确(即它们包含未知)的行,则需要在所有输出中返回“无效”。我可以在现有代码中添加什么来实现这一点?我还需要能够过滤出这些无效的条目以后。任何帮助/建议都将不胜感激!谢谢

#function to convert month, day and time
import datetime
def compute_day_year(n):
    Season = data.loc[n,'Crash_Month']
    if 1 >= data.loc[n,'Crash_Month'] <= 2 or data.loc[n,'Crash_Month']== 12:
        print('Summer')

    elif 3 >= data.loc[n,'Crash_Month'] <=5:
        print('Autumn')

    elif 6 >= data.loc[n,'Crash_Month'] <=8:
        print('Winter')

    elif 9 >= data.loc[n,'Crash_Month'] <=11:
        print('Spring') 


    DayWeek = data.loc[n,'Crash_Day']
    if data.loc[n,'Crash_Day'] == 1:
        print('Monday')

    elif data.loc[n,'Crash_Day'] == 2:
        print('Tuesday') 

    elif data.loc[n,'Crash_Day'] == 3:
        print('Wednesday')   

    elif data.loc[n,'Crash_Day'] == 4:
        print('Thursday')      

    elif data.loc[n,'Crash_Day'] == 5:
        print('Friday')

    elif data.loc[n,'Crash_Day'] == 6:
        print('Saturday')

    elif data.loc[n,'Crash_Day'] == 7:
        print('Sunday')

    TPDay = timeobj
    if timeobj >= datetime.time(6,0,0) <=datetime.time(11,59,0):
            print('Morning')

    elif timeobj >= datetime.time(12,0,0) <=datetime.time(17,59,0):
            print('Afternoon')

    elif timeobj >= datetime.time(18,0,0) <=datetime.time(23,59,0):
            print('Evening')

    elif timeobj >= datetime.time(0,0,0) <=datetime.time(5,59,0):
            print('Night')

 #compute day year is the day/row to convert
compute_day_year(0)
#用于转换月、日和时间的函数
导入日期时间
def计算日年(n):
季节=数据.loc[n,'Crash\u Month']

如果1>=data.loc[n,'Crash\u Month']=data.loc[n,'Crash\u Month']=data.loc[n,'Crash\u Month']=datetime.time(6,0,0)=datetime.time(12,0,0)=datetime.time(18,0,0)=datetime.time(0,0)您可以将字符串添加到变量中,而不是直接打印所有内容。这将允许您在出现问题时将其设置为无效。 因此,每个
print(text)
都应该替换为
output+=text
。 别忘了加上

return output
在你的功能结束时


一些改进

使用字典或更简单的列表重写elif语句:

# this is a list which stores the days
days = ['Monday', etc.]

DayWeek = data.loc[n,'Crash_Day']
# this line checks you're giving a good argument (day 1-7)
if 0 < DayWeek <= 7:
    # this gets the day at the given index
    # -1 because lists start with the index 0, not 1
    output += days[DayWeek - 1]
else:
    # wrong arguments given
    return "Invalid"
要么删除它,要么使用它



我真的很感谢你的反馈/帮助-我在编码方面的经验一般不到一个月(你可以肯定地说),所以我正在努力尽快学习。还有!你能解释一下你建议重写我的elif语句的代码块是怎么回事吗?如何/为什么这样做?请不要破坏你的帖子。
TPDay = timeobj
elif timeobj >= datetime.time(0,0,0) <= datetime.time(5,59,0):
elif datetime.time(0,0,0) <= timeobj < datetime.time(6,0,0):
# < 6 is the same as <= 5