首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python2:测试返回unicode字符串的函数的输出

Python2:测试返回unicode字符串的函数的输出
EN

Stack Overflow用户
提问于 2013-09-14 00:11:13
回答 1查看 75关注 0票数 0

我有一个函数,可以在内部使用unicode,我想使用py.test测试它。目前,我有以下代码:

代码语言:javascript
复制
def test_num2word():
    assert num2word(2320)  == u"dva tisíce tři sta dvacet"

但是,断言失败,出现以下错误:

代码语言:javascript
复制
E       assert u'dva tis\xed...i sta dvacet ' == u'dva tis\xc3\...9i sta dvacet'
E         - dva tis\xedce t\u0159i sta dvacet 
E         ?        ^    ^            -
E         + dva tis\xc3\xadce t\xc5\x99i sta dvacet
E         ?

据我所知,我的函数正确地返回unicode,然后尝试将其与utf-8编码的字符串进行比较,这显然是失败的。然而,我认为在我的源代码中使用u"..."也可以将字符串转换为Python内部使用的相同编码。

我的问题是,有没有一种比较它们的合理方法,或者我需要在每个测试语句中添加一个decode('utf-8') (在右边)或一个encode('utf-8') (在左边)。即使我编写了一个包装器函数,这对我来说也不是很理想--一定有一种方法可以比较清楚!不,使用Python 3不是一个选择。

EN

回答 1

Stack Overflow用户

发布于 2013-09-15 19:13:03

你的错误并不清楚,但看起来像是;

代码语言:javascript
复制
assert u'dva tis\xed...i sta dvacet ' == u'dva tis\xc3\...9i sta dvacet'

这两个字符串的前面都有u,所以它们都是unicode字符串。但其中一个包含损坏的内容:dva tisíce tÅi sta dvacet

如果这个字符串是从您的测试py文件中获得的,那么问题是源代码本身并没有使用与您保存它时相同的编码来读取。这可以通过两种方式来解决:

在文本编辑器中将

  1. 另存为UTF-8,并在文件顶部包含# -*- coding: utf-8 -*-行(请参阅源代码中的this question.
  2. use字符串文字编码,以避免依赖源文件编码:

assert num2word(2320) == u‘’dva\u00edce t\u0159i sta dvacet'

(*:它们以什么编码存储在内存中是一个很长的故事,但作为Python程序员,这并不是您通常需要担心的问题。)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18790783

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档