【问题标题】:Using datetime with another function [closed]将日期时间与另一个函数一起使用 [关闭]
【发布时间】:2020-11-18 17:15:21
【问题描述】:

我的错误处理工作有效,但出了点问题。

import datetime
def d(date):
    return datetime.datetime.strptime(date, "%d/%m/%Y")


def test(prompt):
    while True:
        try:
            value = input(prompt)
            a = d(value)
            break
        except ValueError or TypeError:
            print("Wrong format")
    return a

b = test("Write date")

def func():
    a = d(b)
    if d('1/12/2020') <= a <= d('28/02/2021'):
        print("ok")
    else:
        print("no")

函数()

当我将b 放入另一个函数时,我得到:

return datetime.datetime.strptime(datumet, "%d/%m/%Y")
TypeError: strptime() argument 1 must be str, not datetime.datetime. 

但如果没有错误处理,它就可以工作。代码有什么问题?

【问题讨论】:

  • 错误显然来自func,您没有显示给我们,所以我们无法帮助您。无论哪种方式,datumet根据错误已经是datetime,所以你不需要调用strptime
  • 我会告诉你功能
  • 你觉得哪里不对?
  • 您需要在某处为TypeError 添加错误处理——在d() 函数本身或尝试使用它的任何地方。
  • @martineau,我放置了:除了 ValueError 或 TypeError(在测试函数中),但它不起作用。

标签: python python-3.x for-loop if-statement while-loop


【解决方案1】:

您的test 函数返回一个日期时间对象。在func 函数中,您尝试获取传入的日期时间对象并在其上调用d() 函数,但d() 需要一个字符串作为其输入。

看看这一行:

b = test("Write date")

b 是一个日期时间,因为这是 test 返回给它的内容。然后当你打电话时

func(b)

您正在传递该日期时间。然后,在func 中,你有:

if d('1/12/2020') <= d(date) <= d('1/12/2021'):

第一次调用d('1/12/2020') 有效,因为d 期望得到一个字符串。第二次调用d(date) 失败,因为date 不是字符串:它是您传入的日期时间。第三次调用d('1/12/2021') 成功,但你永远不会走那么远因为第二次调用失败。

【讨论】:

  • 我明白了,我该怎么办?
  • 现在我明白你的意思了!!但是我应该如何解决这个问题?我需要传入参数
  • func中调用d(date),如果它已经是一个日期时间?
  • 你是这个意思吗?我编辑了代码?还是不行
  • 如果您直接在传递给funcdate 值上尝试比较,而不是尝试调用d(date),会发生什么情况?
猜你喜欢
  • 2011-02-20
  • 2019-12-17
  • 1970-01-01
  • 1970-01-01
  • 2010-10-22
  • 2018-11-20
  • 1970-01-01
相关资源
最近更新 更多