Python TypeError:序列项0:应为str实例,找到int

Python TypeError:序列项0:应为str实例,找到int,python,Python,徖 def stringToLek(red): lek = {} deo = red.strip().split("|") lek["ser_br"] = int(deo[0]) lek["fab_naziv"] = deo[1] lek["gen_naziv"] = deo[2] lek["kol_leka"] = int(deo[3]) lek["c_leka"] = float(deo[4]) return lek def

def stringToLek(red):
    lek = {}
    deo = red.strip().split("|")
    lek["ser_br"] = int(deo[0])
    lek["fab_naziv"] = deo[1]
    lek["gen_naziv"] = deo[2]
    lek["kol_leka"] = int(deo[3])
    lek["c_leka"] = float(deo[4])
    return lek
def  lekToString(lek):
    return '|'.join([lek['ser_br'], lek['fab_naziv'], lek['gen_naziv'], lek['c_leka'], lek['kol_leka']])

join()
的所有参数都必须是字符串。它在你的第一个时阻塞,
lek['ser\u br']
,因为那不是一个字符串,而是一个
int
lek[“kol_leka”]
lek[“c_leka”]
也会有同样的问题。

也许你应该定义一个类来实现这个行为

TypeError: sequence item 0: expected str instance, int found
def  lekToString(lek):
return '|'.join([str(lek['ser_br']), str(lek['fab_naziv']), str(lek['gen_naziv']), str(lek['c_leka']), str(lek['kol_leka'])])
类外的
def
s在这一点上是非常无用的,但是我把它们放在里面只是为了向您展示它们的样子

这可能不是解决问题的理想方案,但至少显示了一种重构,它使用面向对象编程将逻辑封装在类中。强制代码的其余部分只使用类的方法与之交互,这在您第一次开始时感觉像是一种阻力,但它通过减少代码不同部分之间的内部耦合而大大有助于后续工作

您还可以通过让
lek
成为
str
的子类来解决这个问题。不过,这方面也存在挑战。参见示例(讨论的是
dict
而不是
str
,但问题类似)。实际上,如果小心,可以从
str
继承,但必须重写
\uuuuu new\uuuuu
,而不是
\uuuu init\uuuuu

class-Lek(str):
定义-新定义(cls,序号):
self=super()
deo=seq.strip().split(“|”)
self.ser_br=int(deo[0])
self.fab_naziv=deo[1]
self.gen_naziv=deo[2]
self.kol_leka=int(deo[3])
self.c_leka=浮动(deo[4])
回归自我

join方法可能重复的
join
方法适用于(列表)字符串。你在尝试使用整数。首先用
str()
转换它们。你想用一个短语来回答一个问题,解释一下你想要达到的目标和失败的原因吗?目前,如果人们想从答案中获益,他们必须自己猜测所有这些。
class Lek:
    def __init__(self, red):
        deo = red.strip().split("|")
        self.ser_br = int(deo[0])
        self.fab_naziv = deo[1]
        self.gen_naziv = deo[2]
        self.kol_leka = int(deo[3])
        self.c_leka = float(deo[4])
        return self

    def __str__(self):
        # The order here is different than in the initializer, I guess it's a bug?
        return '|'.join([
            self.ser_br, self.fab_naziv, self.gen_naziv, self.c_leka, self.kol_leka])


def stringToLek(red):
    return Lek(red)

def  lekToString(lek):
    return str(lek)