我正在编写一个新的RF库,需要使用字符串参数,因为我使用的(预先存在的)Python库需要字符串,而不是unicode。 当然,在调用仅支持字符串的现有函数之前,我可以将每个unicode转换为字符串。
import ConfigParser
class RFConfigParser:
def get (self,section, option):
print type (section) #prints unicode
section = str (section) #works but I dont want to do this
return self._config.get (section, option) #this pre-existing function expect a string input
问题是我有很多类似的函数,在每个函数中我都要将这个unicode称为字符串转换马戏团。
是否有直接的方法这样做,以便RF功能将直接接受字符串格式
另一个问题是默认的unicode支持Robot Framework功能还是RIDE功能? (我正在使用RIDE,这就是我遇到这个问题的原因)
答案 0 :(得分:6)
在将这些Unicode字符串传递给库之前,可以使用Evaluate关键字将这些Unicode字符串强制转换为普通字符串。
这样的事情:
lib.py:
def foo(foo):
print type(foo)
的test.txt
*** Settings ***
Library lib.py
*** Test Cases ***
demo
${bar} Evaluate str('bar')
foo ${bar}
最佳解决方案取决于具体情况。也许一个解决方案是编写一个关键字,为您执行该转换,然后调用库函数。也许最好的选择仍然是修改你的库以接受Unicode字符串。这取决于。
答案 1 :(得分:0)
如果您使用的是远程库,请注意RobotFramework会检查要通过XmlRpc传输的数据的内容:
def _handle_binary_result(self, result):
if not self._contains_binary(result):
return result
try:
result = str(result)
...
如果数据恰好只包含ASCII,它将传输一个字符串,如果数据不能用ASCII编码,它将传输二进制数据。我不知道你如何强制执行unicode结果类型,并避免来自比较操作的抱怨,例如应该等于关于不同的数据类型:
Argument types are: <type 'str'> <type 'unicode'>
如果在我的远程库中,我会执行以下操作:
return unicode(result, 'utf-8')
对于给定的输入,接收不同类型的结果
return unicode(u'test', 'utf-8') --> 'test'
return unicode(u'ü', 'utf-8') --> u'ü'