gpt4 book ai didi

Python Eval 使日期时间模块可用

转载 作者:行者123 更新时间:2023-12-03 21:26:59 26 4
gpt4 key购买 nike

我正在寻找一种使 datetime 函数在 eval 表达式中可用的方法。这将是最小的工作代码

import datetime
input_string = 'from_{today:%m-%d}_to_{yesterday:%m-%d}'
input_dict = {
'today': eval('datetime.datetime.today()', {'datetime': datetime}, {}),
'yesterday': eval('datetime.datetime.today()-datetime.timedelta(days=1)', {'datetime': datetime}, {})
}
print(input_string.format(**input_dict))

然而这并不妨碍 eval 函数执行 __builtins__ 的方法。 .如何阻止它访问 __builtins__ ?

最佳答案

假设你想做我认为你想做的事:

import datetime
import math

user_input = input()

# set locals to a dict containing only datetime
# set globals to an empty dict
eval(user_input, {'datetime': datetime}, dict())

如果用户输入“datetime.date.today()”,那么你会得到“datetime.date(2020, 2, 5)”。如果用户输入“math.acos(0.5)”,那么你会得到“NameError: name 'math' is not defined”。

注意:正如其他人所说,出于安全原因,我并不真正支持这种方法。例如。用户可以输入 '"datetime.date.today()" + quit()'退出你的程序,或者更糟。

关于Python Eval 使日期时间模块可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60078600/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com