【发布时间】:2023-03-28 15:55:01
【问题描述】:
我的最终目标是在嵌套的for 循环中获取今天和昨天两天的日、月和年。
下面我正在导入东西并定义today和yesterday
import datetime as dt
from datetime import timedelta
today = dt.date.today()
yesterday = today - timedelta(1)
现在我正在定义一个字典来映射每年、每月和每天的格式
d_day_format = {'year': '%y',
'month': '%m',
'day': '%d'}
所以现在我想创建以下变量:today_year (20)、today_month (12)、today_day (31)、yesterday_year (20)、yesterday_month (12) 和 @987654331 @ (30)
我正在使用eval()从字符串中获取变量的值,如下循环所示
for d in 'today yesterday'.split():
for k in d_day_format.keys():
globals()[f"{d}_{k}"] = eval(d).eval(k).format(f"{d_day_format[k]}")
变量赋值eval(d) 的第一部分有效,但似乎我不能将eval() 用于方法:
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
~/installed/python/demuxDelayer/demuxDelayer_v2.py in <module>
1 for d in 'today yesterday'.split():
2 for k in d_day_format.keys():
----> 3 globals()[f"{d}_{k}"] = eval(d).eval(k).format(f"{d_day_format[k]}")
AttributeError: 'datetime.date' object has no attribute 'eval'
有谁知道如何解决这个问题?
【问题讨论】:
-
您希望在第一个
eval调用返回的对象上使用getattr而不是eval。不过,您甚至不需要第一个eval电话。您基本上是在使用eval进行字典查找,这对于该任务来说是多余的。将对象放入字典而不是使用松散变量,然后进行典型的查找。
标签: python-3.x dictionary datetime for-loop