/ / Por que a união de duas strings produz um erro de tipo? - python

Por que a união de duas cadeias produz um erro de tipo? - python

class node:
def __init__(self, parent, daughters, edge):
self.parent = parent
self.daughters = daughters
self.edge = edge
trie.append(self)
self.index = len(trie) - 1
trie[parent].daughters.append(self.index)
...

def SuffixTreeConstruction():
global trie
print(len(trie))
for node in trie:
if len(node.daughters) == 1:
node.edge = "".join([node.edge, trie[node.daughters[0]].edge])
...

Eu quero pegar as arestas de dois nós diferentes e combiná-los como uma string. As arestas são iterações de uma string (for base in text: create node with base as edge), então eu suponho que eles são cadeias de caracteres simples, não caracteres (com valores numéricos). No entanto, eles são aparentemente inteiros. Existe alguma razão evidente para isso?

Traceback (most recent call last):
File "trieMatching.1.py", line 149, in <module>
SuffixTreeConstruction()
File "trieMatching.1.py", line 106, in SuffixTreeConstruction
node.edge = "".join([node.edge, trie[node.daughters[0]].edge])
TypeError: sequence item 1: expected str instance, int found

Respostas:

1 para resposta № 1

A partir do erro, é possível que qualquer um de node.edge ou trie [node.daughters [0]]. Edge] seja do tipo <type "int"> Então, tente digitá-las em string por

node.edge = "".join([str(node.edge), str(trie[node.daughters[0]].edge]))

0 para resposta № 2

Outra maneira de evitar typecasting é usar o format string para obter o mesmo resultado "

node.edge = "{0}{1}".format(node.edge, trie[node.daughters[0]].edge)

O typecasting será feito para você. O benefício adicionado é que você pode formatar as coisas como quiser ... veja format docs e exemplos