所以我在这里寻找的是像PHP的print_r函数.这样我就可以通过查看相关对象的状态来调试我的脚本.
python debugging introspection pretty-print python-datamodel
我正在编写一个将数据存储在字典对象中的程序,但是这个数据需要在程序执行期间的某个时刻保存,并在程序再次运行时加载回字典对象.如何将字典对象转换为可以写入文件并加载回字典对象的字符串?这有望支持包含词典的词典.
如何将django Model对象转换为包含其所有字段的dict ?理想情况下,所有内容都包含外键和带有editable = False的字段.
让我详细说明一下.假设我有一个类似以下的django模型:
from django.db import models
class OtherModel(models.Model): pass
class SomeModel(models.Model):
normal_value = models.IntegerField()
readonly_value = models.IntegerField(editable=False)
auto_now_add = models.DateTimeField(auto_now_add=True)
foreign_key = models.ForeignKey(OtherModel, related_name="ref1")
many_to_many = models.ManyToManyField(OtherModel, related_name="ref2")
Run Code Online (Sandbox Code Playgroud)
在终端中,我做了以下事情:
other_model = OtherModel()
other_model.save()
instance = SomeModel()
instance.normal_value = 1
instance.readonly_value = 2
instance.foreign_key = other_model
instance.save()
instance.many_to_many.add(other_model)
instance.save()
Run Code Online (Sandbox Code Playgroud)
我想将其转换为以下字典:
{'auto_now_add': datetime.datetime(2015, 3, 16, 21, 34, 14, 926738, tzinfo=<UTC>),
'foreign_key': 1,
'id': 1,
'many_to_many': [1],
'normal_value': 1,
'readonly_value': 2}
Run Code Online (Sandbox Code Playgroud)
回答不满意的问题:
JSON序列化自定义非可序列化对象的常规方法是子类化json.JSONEncoder,然后将自定义编码器传递给转储.
它通常看起来像这样:
class CustomEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, foo):
return obj.to_json()
return json.JSONEncoder.default(self, obj)
print json.dumps(obj, cls = CustomEncoder)
Run Code Online (Sandbox Code Playgroud)
我正在尝试做的是使用默认编码器进行序列化.我环顾四周但找不到任何东西.我的想法是编码器会看到一些字段来确定json编码.类似的东西__str__.也许是一个__json__领域.在python中有这样的东西吗?
我想制作一个模块的类,我正在使用JSON序列化给使用该软件包的每个人,而不必担心实现他们自己的[普通]自定义编码器.
我想要一种简单的方法在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安全问题是否可以解决,或者是否存在太多微小的细节以使其正常工作?
我们都知道这eval很危险,即使你隐藏了危险的函数,因为你可以使用Python的内省功能深入挖掘并重新提取它们.例如,即使您删除__builtins__,也可以使用它来检索它们
[c for c in ().__class__.__base__.__subclasses__()
if c.__name__ == 'catch_warnings'][0]()._module.__builtins__
Run Code Online (Sandbox Code Playgroud)
但是,我见过的每个例子都使用属性访问.如果我禁用所有内置函数并禁用属性访问(通过使用Python令牌化程序对输入进行标记,并在具有属性访问令牌时拒绝它),该怎么办?
在你问之前,不,对于我的用例,我不需要其中任何一个,所以它不会太瘫痪.
我想要做的是让SymPy的同情功能更安全.目前,它对输入进行了标记,对其进行了一些转换,并在命名空间中对其进行了演绎.但它不安全,因为它允许属性访问(即使它真的不需要它).
我有一个JSON对象的字符串表示形式.
dumped_dict = '{"debug": false, "created_at": "2020-08-09T11:24:20"}'
Run Code Online (Sandbox Code Playgroud)
当我用这个对象调用json.loads时;
json.loads(dumped_dict)
Run Code Online (Sandbox Code Playgroud)
我明白了
{'created_at': '2020-08-09T11:24:20', 'debug': False}
Run Code Online (Sandbox Code Playgroud)
这里没有错.但是,我想知道是否有办法将上面的对象与json.loads转换为如下所示:
{'created_at': datetime.datetime(2020, 08, 09, 11, 24, 20), 'debug': False}
Run Code Online (Sandbox Code Playgroud)
不久,我们能够在调用json.loads时将datetime字符串转换为实际的datetime.datetime对象吗?
我正在使用peewee作为ORM创建API,我需要能够将peewee模型对象转换为JSON对象以发送给用户.有谁知道这样做的好方法?
我跟着如何在python中克服"datetime.datetime而不是JSON serializable"?但这没有帮助
我试过这段代码
>>> import datetime
>>> a =datetime.date(2014, 4, 25)
>>> from bson import json_util
>>> b = json.dumps(a,default = json_util.default)
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/usr/lib/python2.7/json/__init__.py", line 250, in dumps
sort_keys=sort_keys, **kw).encode(obj)
File "/usr/lib/python2.7/json/encoder.py", line 207, in encode
chunks = self.iterencode(o, _one_shot=True)
File "/usr/lib/python2.7/json/encoder.py", line 270, in iterencode
return _iterencode(o, 0)
File "/home/.../python2.7/site-packages/bson/json_util.py", line 256, in default
raise TypeError("%r is not JSON serializable" % obj)
TypeError: datetime.date(2014, 4, 25) …Run Code Online (Sandbox Code Playgroud) python ×10
json ×5
datetime ×2
dictionary ×2
django ×2
eval ×2
debugging ×1
javascript ×1
peewee ×1
pretty-print ×1