【问题标题】:Python - none returns from try and except clauses [closed]Python - 没有从try和except子句返回[关闭]
【发布时间】:2016-01-03 12:30:24
【问题描述】:

如果提供了无效条目,则此代码(日期)的返回值为“无”,则给出有效条目。但是,如果第一次给出有效条目,则会给出正确的日期返回。关于如何解决它的任何提示?

def getDate():
    date = input("Please enter the date in DD/MM/YYYY format: ")
    try:
        strptime(date, "%d/%m/%Y")
        return date
    except:
        print ("Invalid Date, please enter again")
        getDate()

【问题讨论】:

  • 1.在 except 案例中,您不会返回任何内容。 2.Don't use bare except。 3. 不要为此使用递归 - 请参阅 stackoverflow.com/q/23294658/3001761
  • 您可以通过将except 子句中的最后一行更改为return getDate() 来使其工作。但是,正如 jonrsharpe 指出的那样,您不应该使用递归来执行重试;改用循环。
  • 关闭这个问题的原因似乎完全错误。它可以被复制并且它(可能)不是一个错字。

标签: python function validation date try-except


【解决方案1】:

由于这个问题有很多错误的答案,我觉得有必要再补充一个。在 except 子句中添加return getDate() 将使其按您希望的方式工作:

def getDate():
    date = input("Please enter the date in DD/MM/YYYY format: ")
    try:
        strptime(date, "%d/%m/%Y")
        return date
    except:
        print ("Invalid Date, please enter again")
        return getDate()

但是,使用递归处理重试并不理想。改用循环:

from time import strptime

def getDate():
    while True:
        date = input("Please enter the date in DD/MM/YYYY format: ")
        try:
            strptime(date, "%d/%m/%Y")
            return date
        except ValueError:
            print ("Invalid Date, please enter again")

【讨论】:

  • 你不需要return strptime(date, "%d/%m/%Y")而不是return date吗?
  • 不。 strptime 调用只是为了确保 date 是有效(正确格式)的日期字符串。
  • @JamieBull:为什么? strptime() 仅用于验证用户输入的字符串,并且该函数返回字符串,而不是 strptime() 返回的任何对象(在我的情况下为 time.struct_time)。
  • 顺便说一句,我会将return date 放在else 中。
  • @TigerhawkT3:为什么?在这种情况下会有所不同吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-11
  • 2013-04-10
  • 2019-06-26
相关资源
最近更新 更多