首页 > 解决方案 > 字符串连接操作中的属性错误和键错误

问题描述

有一个函数如下

# Transform a list of word ids into a caption.
    def ids2caption(self, caption_ids):
        id2word = self.vocabulary['id2word']
        return string.join([id2word[w] for w in caption_ids], " ")

这将导致以下错误消息

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-22-246a65714ebe> in <module>
     69 print('imgId', imgId)
     70 print('caption', caption.tolist())
---> 71 print('captionString', trainData.ids2caption(caption))

<ipython-input-22-246a65714ebe> in ids2caption(self, caption_ids)
     45     def ids2caption(self, caption_ids):
     46         id2word = self.vocabulary['id2word']
---> 47         return string.join([id2word[w] for w in caption_ids], " ")
     

AttributeError: module 'string' has no attribute 'join'

我将其实现更改为以下内容,并且收到了一些其他错误消息。

# Transform a list of word ids into a caption.
def ids2caption(self, caption_ids):
    id2word = self.vocabulary['id2word']
    return "".join([id2word[w] for w in caption_ids])


---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-23-0f32ccd7d847> in <module>
     69 print('imgId', imgId)
     70 print('caption', caption.tolist())
---> 71 print('captionString', trainData.ids2caption(caption))

<ipython-input-23-0f32ccd7d847> in ids2caption(self, caption_ids)
     46         id2word = self.vocabulary['id2word']
     47         #return string.join([id2word[w] for w in caption_ids], " ")
---> 48         return "".join([id2word[w] for w in caption_ids])
     49 
     50     # Return imgId, and a random caption for that image.

<ipython-input-23-0f32ccd7d847> in <listcomp>(.0)
     46         id2word = self.vocabulary['id2word']
     47         #return string.join([id2word[w] for w in caption_ids], " ")
---> 48         return "".join([id2word[w] for w in caption_ids])
     49 
     50     # Return imgId, and a random caption for that image.

KeyError: tensor(5001)

标签: pythonpython-3.x

解决方案


w如果你的代码不是一个 key in ,你的代码不会尝试不失败id2word,所以当它失败时不应该有太多的惊喜。你可以尝试改变

return "".join([id2word[w] for w in caption_ids])

return "".join([id2word.get(w,”UNKNOWN WORD”) for w in caption_ids])

甚至:

return "".join([id2word.get(w,w) for w in caption_ids])

推荐阅读