如何修复Python代码中出现的TypeError: str类型相减操作数错误
Python到站时间差计算TypeError报错修复
报错原因
input()方法返回值默认是字符串类型,原代码未提前将输入的时、分值转成数值类型,就直接参与乘法、减法运算,直接触发unsupported operand type(s) for -: 'str' and 'str'报错- 存在两处会在类型问题修复后继续触发错误的逻辑问题:
- 类型转换顺序颠倒:原代码先让字符串和数值做乘法(Python中字符串乘整数的效果是重复拼接字符串,并非数学运算),最后才尝试把计算结果转成整数,运算逻辑本身不成立
- 打印环节误将数值变量
razlika作为函数调用,写法razlika('sati')会触发“非可调用对象”的类型错误
可直接运行的修复代码
# 读取输入时直接转换为整数,从根源避免字符串运算问题 v2sat = int(input()) v2minut = int(input()) print('Jelena je stigla na stanicu u:', v2sat, v2minut) v1sat = int(input()) v1minut = int(input()) print('Ivana je stigla na stanicu u:', v1sat, v1minut) # 统一换算为总秒数计算 v2sekunde = v2sat * 3600 + v2minut * 60 v1sekunde = v1sat * 3600 + v1minut * 60 # 计算以小时为单位的时间差 razlika = (v1sekunde - v2sekunde) / 3600 # 修正打印逻辑 print('Razlika je:', razlika, 'sati')
核心修复动作
- 类型转换前置:读取到
input()返回的字符串后立刻用int()转为整数,后续所有运算都是数值间操作,从根源消除字符串运算报错 - 调整运算顺序:先完成类型转换,再执行乘除、加减计算,符合Python数值运算规则,避免出现字符串重复拼接的无效计算
- 修正打印语法:删除对
razlika的错误函数调用,把单位文本sati作为print的独立参数传入完成结果输出
内容的提问来源于stack exchange,提问作者zadious
相关产品推荐
相关产品推荐

