使用eval创建日期戳遇NameError及生成日期字符串方法咨询
解决eval中调用datetime的NameError并生成日期字符串
报错原因
你调用eval时传入的全局和局部命名空间都是空字典({}, {}),导致eval执行环境里找不到datetime这个名称,因此抛出NameError。
解决方案
1. 向eval传入datetime命名空间
如果必须使用eval,需要把datetime对象注入到eval的执行环境中:
from datetime import datetime # 生成datetime对象 print(eval("{'datestamp': datetime.today()}", {'datetime': datetime})) # 生成指定格式的日期字符串 result = eval("{'datestamp': datetime.today().strftime('%Y-%m-%d %H:%M:%S')}", {'datetime': datetime}) print(result)
strftime的格式参数可按需调整,比如%Y-%m-%d对应纯年-月-日格式。
2. 避免使用eval(推荐方案)
eval存在安全风险(执行不可信字符串可能引发代码注入),直接构造字典更安全简洁:
from datetime import datetime # 生成日期字符串字典 result = {'datestamp': datetime.today().strftime('%Y-%m-%d %H:%M:%S')} print(result)
内容的提问来源于stack exchange,提问作者disruptive
相关产品推荐
相关产品推荐

