我有一个基本的词典如下:
sample = {}
sample['title'] = "String"
sample['somedate'] = somedatetimehere
Run Code Online (Sandbox Code Playgroud)
当我尝试做的时候,jsonify(sample)我得到:
TypeError: datetime.datetime(2012, 8, 8, 21, 46, 24, 862000) is not JSON serializable
我能做些什么,以便我的字典样本可以克服上述错误?
注意:虽然它可能不相关,但字典是从mongodb中检索记录生成的,当我打印输出时str(sample['somedate']),输出是2012-08-08 21:46:24.862000.
stringExp = "2^4"
intVal = int(stringExp) # Expected value: 16
Run Code Online (Sandbox Code Playgroud)
这将返回以下错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int()
with base 10: '2^4'
Run Code Online (Sandbox Code Playgroud)
我知道eval可以解决这个问题,但是不是有更好的 - 更重要的 - 更安全的方法来评估存储在字符串中的数学表达式吗?
我想要一种简单的方法在Python中执行"计算器API".
现在,我并不关心计算器将支持的确切功能集.
我希望它接收一个字符串,"1+1"并在我们的例子中返回一个包含结果的字符串"2".
有没有办法让eval这种东西安全?
首先,我会这样做
env = {}
env["locals"] = None
env["globals"] = None
env["__name__"] = None
env["__file__"] = None
env["__builtins__"] = None
eval(users_str, env)
Run Code Online (Sandbox Code Playgroud)
这样调用者就不会搞乱我的局部变量(或看到它们).
但我相信我在这里监督很多.
eval安全问题是否可以解决,或者是否存在太多微小的细节以使其正常工作?
有对SO有关使用Python的EVAL许多问题不安全的字符串(例如:Python中的安全性的eval()在不安全的条件?,Python的:使EVAL安全).一致的答案是,这是一个坏主意.
但是,我发现很少有关于哪些字符串可以被认为是安全的信息(如果有的话).现在我想知道是否有"安全字符串"的定义可用(例如:一个字符串只包含小写字母ascii字符或任何符号+ - */()).我发现的漏洞通常依赖于_.,:[]'"之类的东西.这种方法是否安全(用于图形绘制Web应用程序)?
否则,我猜使用解析包,因为Alex Martelli建议是唯一的方法.
编辑:不幸的是,没有任何答案能够给出令人信服的解释,说明为什么/如何将上述字符串视为不安全(一种微小的工作利用)或相反的解释.我知道应该避免使用eval,但这不是问题.因此,我将奖励第一个提出工作漏洞利用或真正好解释为什么如上所述的字符串被认为是安全的.
我有一个图像数组,其 X 乘以 Y 形状为 2048x2088。x 轴有两个 20 像素的区域,一个在开始,一个在结束,用于校准主图像区域。要访问这些区域,我可以像这样对数组进行切片:
prescan_area = img[:, :20]
data_area = img[:, 20:2068]
overscan_area = img[:, 2068:]
Run Code Online (Sandbox Code Playgroud)
我的问题是如何在配置文件中定义这些区域,以便将此切片推广到其他可能具有不同预扫描和过扫描区域并因此需要不同切片的相机。
理想情况下,类似下面的字符串将允许在相机特定的配置文件中进行简单的表示,但我不确定如何将这些字符串转换为数组切片。
prescan_area_def = "[:, :20]"
image_area_def = "[:, 20:2068]"
overscan_area_def = "[:, 2068:]"
Run Code Online (Sandbox Code Playgroud)
也许我缺少一些明显的东西?
谢谢!
我参考了许多来源,但大多数用途json.loads()或ast.literal_eval()不适用于我的情况:
x = '[(0.0, 58.099669), 56565, Raining]'
Run Code Online (Sandbox Code Playgroud)
预期输出:
x = [(0.0, 58.099669), 56565, 'Raining']
Run Code Online (Sandbox Code Playgroud)
有什么解决方法吗?
我是python的新手并试图在下面编写类似的东西(代码A),所以它确实像代码B一样.我想利用数学运算符的用户输入作为do_what变量.我们如何在python中编写这段代码(A),这样它就像代码B一样工作?
代码A.
num1 = input("Enter a number: ")
num2 = input("Enter another number: ")
do_what = input("Enter a calculation symbol for calculation you want to perform: ")
result = float(num1) do_what float(num2)
print("result is: " + str(result))
Run Code Online (Sandbox Code Playgroud)
代码B.
num1 = input("Enter a number: ")
num2 = input("Enter another number: ")
result = int(num1) + int(num2)
print("result is: " + str(result))
Run Code Online (Sandbox Code Playgroud)