所以我试图将数组中的字符串赋给变量并在函数中使用它。字符串应为"n02504458"
。让我解释。这是原始数组:
('Predicted:', [
(u'n02504458', u'African_elephant', 0.99588591),
(u'n01871265', u'tusker', 0.004068926),
(u'n02504013', u'Indian_elephant', 4.499541e-05)
])
来自以下行:
decode_predictions(preds, top=3)[0]
如果我执行以下操作:
result = decode_predictions(preds, top=3)[0]
code = result[0][0]
要获得n02504458
并使用print(s)
将其打印出来,我会得到我期望的结果。
但是,当我尝试将其传递给函数时,如下所示:
q = '"'
s = q + code + q
ids = synset_to_dfs_ids(s)
我会收到错误。但是,如果我这样做,我就不会有任何问题。
s = "n02504458"
ids = synset_to_dfs_ids(s)
我是python的新手,我真的不明白发生了什么。谢谢你的帮助。
答案 0 :(得分:0)
在Python2中,默认情况下,字符串是简单的ASCII - <type 'str'>
。强制字符串文字为unicode的一种方法是在开头引号前加上字符u
- <type 'unicode'>
。
一般来说,最好坚持使用一个或另一个,而不是混合它们(例如,使用+
字符串连接运算符)。
要在编写代码时修复代码,您可以:
q
也 unicode; OR code
变量从unicode转换为带有str(code)
的“普通”字符串,但请注意,如果您的输入实际上包含任何非ASCII字符,这将失败。实际上,您想知道synset_to_dfs_ids(s)
函数是否希望获得 str 或 unicode 字符串,并确保它获得该字符串。< / p>
另一件需要注意的事情是,当你print
输出一个变量时,得到的是适合(通常)人类观察的对象的表示。当你传递变量时,它不是收件人“看到”的东西。
所以在这种情况下,我真的怀疑在你已经想要做的事情中添加一些已经是(unicode)字符串的引号。
按原样将code
传递给synset_to_dfs_ids()
,如果该函数可以处理unicode,或者在必要时将code
转换为<str>
类型 :synset_to_dfs_ids(str(code))
(尽管有上述条件)。
(顺便说一下,你不会在Python3中遇到这个困难,默认情况下所有的字符串都是unicode。除非你有充分的理由选择2以上,我建议只使用Python3 .Python2计划到达终点在我看来,3更容易学习,因为它可以消除一些棘手的违规行为。)
答案 1 :(得分:0)
我认为你可能会添加太多引号。
在您的工作示例中,您定义了一个字符串s_working = "n02504458"
。变量s_working
包含字符n02504458
。
在你的&#34;破碎&#34;例如,您定义一个字符串s_broken = '"' + code + '"'
。假设code
是包含字符n02504458
的字符串,变量s_broken
包含字符"n02504458"
。您已明确添加变量的引号!