TypeError: 不支持的操作数类型 -: 'datetime.date' 和 'str'

Posted

技术标签:

【中文标题】TypeError: 不支持的操作数类型 -: \'datetime.date\' 和 \'str\'【英文标题】:TypeError: unsupported operand type(s) for -: 'datetime.date' and 'str'TypeError: 不支持的操作数类型 -: 'datetime.date' 和 'str' 【发布时间】:2021-12-30 16:02:23 【问题描述】:

目标是从 delta 表中获取日期,如果它是昨天的日期,即未找到交易日期,那么在其他部分昨天的日期减去当前日期的日期,并在 for 循环中处理另一个笔记本需要使用 pyspark。

fromdate=spark.sql("select to_date(max(time),'yyyy-mm-dd') date from default.table")
display(x)
print("latest TransactionDate not found")
todate = datetime.date.today()
dates = todate-fromdate

错误 - TypeError:第 5 行的 -: 'datetime.date' 和 'str' 的操作数类型不受支持

请分享if else方式写的有效代码。

【问题讨论】:

fromdate 是数据框对象而不是日期时间,要将日期输入 python 变量使用 fromdate = fromdate.first().date 你好我用过这样 import datetime fromdate=spark.sql("select max(time) as latestlog from default.table") fromdate1 = fromdate.first().date get error AttributeError: date 不,我需要从我尝试过的 sql 表中获取最大日期 fromdate1 = fromdate.first().lastestlog (属性错误) & fromdate1 = fromdate.collect()[0][0] (例外:无法调用 display()) 这对我有用 x=fromdate.orderBy("latestlog", ascending=False).head(1)[0][0]。 有没有更好的方法来放入 if/else 块,例如如果它是以前的日期,则显示交易日期未找到,否则找到天差并在 for 循环中运行所有笔记本。 【参考方案1】:

试试这个。

import datetime
df=spark.sql("select to_date('2021-12-25','yyyy-MM-dd') date ")
fromdate = df.collect()[0][0]
todate = datetime.date.today()
print(fromdate)
print(todate)
days = (todate - fromdate).days
print(days)

【讨论】:

以上是关于TypeError: 不支持的操作数类型 -: 'datetime.date' 和 'str'的主要内容,如果未能解决你的问题,请参考以下文章

TypeError:不支持的操作数类型/:'str'和'str'

TypeError: *: 'int' 和 'NoneType' 不支持的操作数类型

TypeError:&:'str'和'str'不支持的操作数类型

TypeError: 不支持的操作数类型 -: 'int' 和 'list'

TypeError:不支持的操作数类型/:'float'和'datetime.timedelta'

TypeError: 不支持的操作数类型 -: 'datetime.date' 和 'str'