Python怪异[n chars]编码错误?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python怪异[n chars]编码错误?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2682字,纯文字阅读大概需要4分钟。
内容图文
![Python怪异[n chars]编码错误?](/upload/InfoBanner/zyjiaocheng/768/1c9c8e2d867d475398ffec1ad7cafdbb.jpg)
我有一个看似愚蠢和简单的错误,但对于我的生活,我无法弄清楚为什么这不起作用.在我的测试中,当我比较两个词典时,我收到此错误:
Traceback (most recent call last):
File "/path/to_my_app/tests/test_unit.py", line 120, in test_destroy_data
self.assertEqual(obsolete_data, expected_obsolete_data)
AssertionError: {'cou[45 chars]es': {<Category: Test Category>}, 'beers': {<Beer: Test Beer>}} != {'cou[45 chars]es': {<Category: Test Category>}, 'beers': {<Beer: Test Beer>}}
{'beers': {<Beer: Test Beer>},
'categories': {<Category: Test Category>},
'countries': {<Country: Test Country>}}
Django 2.0,Python 3.5
我的方法:
def destroy_data(self):
"""
Remove entries not in the csv file.
"""
obsolete_data = {
'beers': set(Beer.objects.all()) ^ set(self.beer_list),
'categories': set(Category.objects.all()) ^ set(self.category_list),
'countries': set(Country.objects.all()) ^ set(self.country_list),
}
for data in obsolete_data:
[obj.delete() for obj in obsolete_data[data]]
return obsolete_data
我的测试:
def test_destroy_data(self):
"""
Remove old entries.
"""
self.importer.import_data(destroy=False)
obsolete_data = self.importer.destroy_data()
expected_obsolete_data = {
'countries': {self.country},
'categories': {self.category},
'beers': {self.beer},
}
self.assertEqual(obsolete_data, expected_obsolete_data)
当我在调试器中检查这两个值时,它们是相同的,或者至少它们以这种方式打印出来.我试过用unicode写密钥,但是我得到了同样的错误.为什么会出现[45个字符]?
UPDATE
我在使用self.assertDictEqual时将maxDiff设置为None,并且我确实获得了整个错误输出,但错误保持不变:
Traceback (most recent call last):
File "/path/to_my_app/tests/test_unit.py", line 124, in test_destroy_data
self.assertDictEqual(obsolete_data, expected_obsolete_data)
AssertionError: {'cat[35 chars]>}, 'beers': {<Beer: Test Beer>}, 'countries':[22 chars]ry>}} != {'cat[35 chars]>}, 'countries': {<Country: Test Country>}, 'b[22 chars]er>}}
{'beers': {<Beer: Test Beer>},
'categories': {<Category: Test Category>},
'countries': {<Country: Test Country>}}
解决方法:
经过一些调试,我发现了问题.我从数据库中删除了这些实例,但它们仍然在内存中加载.因此,当我将它们与返回数据进行比较时,它们是不同的对象,即使它们保存相同的数据(除了一个instance.id是None,另一个是1).
所以我不得不手动测试特定的属性:
self.importer.import_data(destroy=False)
obsolete_data = self.importer.destroy_data()
expected_obsolete_data = {
'countries': [self.country, ],
'categories': [self.category, ],
'beers': [self.beer, ],
}
self.assertEqual(
obsolete_data['countries'][0].name,
expected_obsolete_data['countries'][0].name
)
self.assertEqual(
obsolete_data['categories'][0].name,
expected_obsolete_data['categories'][0].name
)
self.assertEqual(
obsolete_data['beers'][0].name,
expected_obsolete_data['beers'][0].name
)
内容总结
以上是互联网集市为您收集整理的Python怪异[n chars]编码错误?全部内容,希望文章能够帮你解决Python怪异[n chars]编码错误?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。