Python报TypeError: can only concatenate str (not "int") to str如何解决
报错原因
TypeError: can only concatenate str (not "int") to str 是类型不匹配错误,触发原因是:
- 你用
t4.get()从输入框获取到的内容本身就是字符串类型,执行id= t4.get()+str()后,id变量是字符串类型 - 后续执行
id += 1时,字符串类型不能直接和整数类型做加法运算,因此报错
修复方案
1. 基础修复(解决报错问题)
如果你的逻辑是基于输入的ID值做自增,先把输入内容转成整数类型再做运算,写入数据库时如果需要字符串格式再转回字符串即可:
# 把原代码的 id= t4.get()+str() 替换为下面的代码 # 先将输入的ID转成整数 id = int(t4.get()) for x in result: id += 1 # 如果数据库ids字段是字符串类型,写入前把id转成字符串即可 val = (str(id), t1.get(), t2.get(), t3.get()) # 后续执行逻辑保持不变
2. 逻辑优化建议
你当前的代码逻辑存在冗余问题:遍历所有已存在的数据库记录、每条记录对应插入一条新数据,会导致每次调用register都会插入和现有记录条数相同的重复数据,不符合正常注册逻辑。
如果你的需求是生成一个比现有最大ID大1的新ID,可以修改为如下逻辑:
# 不需要拉取全量记录,直接查询数据库最大ID即可 cursors.execute("SELECT MAX(ids) from record") max_id = cursors.fetchone()[0] # 以输入ID为基础,或者以数据库最大ID为基准生成新ID base_id = int(t4.get()) new_id = max(base_id, max_id + 1 if max_id else 1) sql = "INSERT INTO record(ids, names,course_year,positions) values(%s ,%s ,%s , %s)" val = (new_id, t1.get(), t2.get(), t3.get()) cursors.execute(sql,val) databases.commit()
补充说明
如果数据库中的ids字段是整数类型,写入时不需要把id转成字符串,直接传整数即可。

内容的提问来源于stack exchange,提问作者So_LoW
相关产品推荐
相关产品推荐

