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)