删除默认的异常消息并在python中仅打印自定义消息

时间:2017-11-09 12:23:35

标签: python python-2.7 python-3.x datetime

Python 2.7 :我正在尝试创建一个方法,检查输入时间是否符合YYYY-MM-DD格式。如果日期不是按照给定的格式,请发送用户自定义消息"请将格式更改为YYYY-MM-DD" 。如果日期符合格式,请检查它是否大于今天的日期,如果不再发送用户自定义消息。在所有情况下,我只需要发出自定义消息的方法,而不是破坏程序。

def validate_timeline(time):
    try:
        datetime.datetime.strptime(time, '%Y-%m-%d')
        try:
            time = datetime.datetime.strptime(time, '%Y-%m-%d')
            dat = datetime.datetime.today()
            if dat > time:
                print("Please enter the future date")
                raise Exception("Choose the date greater than today's date")
        except ValueError:
            raise ValueError("Incorrect date format, should be YYYY-MM-DD")

    except ValueError:
        raise ValueError("Incorrect date format, should be YYYY-MM-DD")

我仍然收到带有自定义消息的默认异常消息。

Exception !! Incorrect date format, should be YYYY-MM-DD Traceback :
Traceback (most recent call last):
  File "My_file.py", line 511, in <module>
    validate_timeline(time)
  File "My_file.py", line 62, in validate_timeline
    raise ValueError("Incorrect date format, should be YYYY-MM-DD")
ValueError: Incorrect date format, should be YYYY-MM-DD

期望的输出:

Enter the command: set timeout 2017-09- to file
"Incorrect date format, should be YYYY-MM-DD"
Enter the command:

这里程序应该要求再次输入命令(raw_input),不应该退出程序。

 elif(condition):
            lis = opt.split()
            timeline = lis[2]
            user = lis[4]
            grp = lis[7]
            validate_timeline(timeline)
            with open("test.txt","r") as f:

2 个答案:

答案 0 :(得分:1)

raise例外的方式似乎很好。问题可能出在呼叫方面。如果您不希望打印这些堆栈跟踪并且程序崩溃,您必须自己处理异常并打印它。

cmd = input("Enter the command:")
try:
    validate_timeline(cmd)
    # do other things
except ValueError as e:
    print(e)

示例输出:

Enter the command: not a real date
Incorrect date format, should be YYYY-MM-DD

答案 1 :(得分:0)

不要提出这些特定的异常,而是编写自定义消息以继续执行程序

def validate_timeline(time):
    try:
        datetime.datetime.strptime(time, '%Y-%m-%d')
        try:
            time = datetime.datetime.strptime(time, '%Y-%m-%d')
            dat = datetime.datetime.today()
            if dat > time:
                print("Please enter the future date")
                #raise Exception("Choose the date greater than today's date")
        except ValueError:
            #raise ValueError("Incorrect date format, should be YYYY-MM-DD")
            print("Incorrect date format, should be YYYY-MM-DD")

    except ValueError:
        #raise ValueError("Incorrect date format, should be YYYY-MM-DD")
        print("Incorrect date format, should be YYYY-MM-DD")