0

我正在尝试在循环中运行以下代码行,并希望将 timedelta 定义为变量,因为它会不断变化。

START_TIME = f"{datetime.datetime.now() - timedelta(int('%d')):%d/%m/%Y 00:00}" % COUNT
END_TIME = f"{datetime.datetime.now() - timedelta(int('%d')):%d/%m/%Y 23:59}" % COUNT

但是,这失败并出现以下错误:

ValueError: invalid literal for int() with base 10: '%d'

我正在尝试获取过去几天一天的开始和结束时间并对其进行一些操作。我也尝试了其他几种方法,但没有奏效。

4

1 回答 1

1

发生这种情况是因为字符串格式化(解决 中的表达式{})是在 printf 样式替换 ( string % object) 之前执行的。

虽然它似乎不太可读,但重新排列代码可能会更好 - 首先计算START_TIMEEND_TIME然后将所有内容转换为字符串。

如果您需要将它们分别放在一行中,您还可以使用括号并string.format()显式调用该方法以确保它最后完成。以下非常通用的示例将起作用:

("{%d}" % 0).format('Hello')
输出:
Hello

但是,鉴于您的示例,这仍然不是很可读。

于 2018-07-14T12:59:54.757 回答