在为我的课写一些测试时,我遇到了一个有趣的简单问题.我想assertDictEqual包含一些列表的两个字典.但是这个列表可能没有以相同的方式排序 - >导致测试失败
例:
def test_myobject_export_into_dictionary(self):
obj = MyObject()
resulting_dictionary = {
'state': 2347,
'neighbours': [1,2,3]
}
self.assertDictEqual(resulting_dictionary, obj.exportToDict())
Run Code Online (Sandbox Code Playgroud)
这有时会失败,具体取决于列表中元素的顺序
FAIL: test_myobject_export_into_dictionary
------------------------------------
- 'neighbours': [1,2,3],
+ 'neighbours': [1,3,2],
Run Code Online (Sandbox Code Playgroud)
任何想法如何以简单的方式断言?
我想在比较之前使用set代替list或排序列表.
我试图挑选我的细胞自动机类的实例,但是我得到了这个错误:
RuntimeError: maximum recursion depth exceeded while calling a Python object
Run Code Online (Sandbox Code Playgroud)
我的细胞自动机由细胞列表(以及其他一些东西)组成,其中每个细胞都有指向它的邻居的指针.在这个特定的CA中,有256个单元.现在,我知道pickler应该能够识别已经被腌制的物体.
来自docs:
*pickle模块跟踪它已经序列化的对象,以便稍后对同一对象的引用不会再次序列化.
所以我真的不知道,为什么我超过了最大递归深度.
我认为也许pickler会进行深度优先酸洗,因此它首先跟随指针,超过递归堆栈然后引发异常.我知道我可以扩展最大递归深度sys.setrecursionlimit(),但我不认为这个好的也不是可扩展的解决方案.
第一个问题:pickler深度优先酸洗?
第二个问题:任何想法如何防止这种异常?
我正在尝试使用postgresql来运行我的play20应用程序,以便我可以使用并稍后部署到Heroku.我听了这个回答.
基本上,我连接到数据库(所以从本地应用程序连接到Heroku postgresql数据库工作),但我无法使用生成的1.sql进化初始化数据库.但是生成的sql没有工作,因为postgresql正在使用模式(它应该在没有模式的情况下工作,但显然我做错了或者数据库做错了什么).
create table user (
id bigint not null,
email varchar(255),
gender varchar(1),
constraint pk_user primary key (id));
Run Code Online (Sandbox Code Playgroud)
结果
ERROR: syntax error at or near "user"
Position: 14 [ERROR:0, SQLSTATE:42601]
Run Code Online (Sandbox Code Playgroud)
我通过向表名添加模式来修复它
create table public.user(
...
);
Run Code Online (Sandbox Code Playgroud)
好的,一切正常,直到我尝试读取或写入数据库.我再次获得sql语法异常,无法使用数据库.似乎sql查询有点错误.
有什么建议可能有问题吗?