Python中TypeError: 'int' object is not callable错误求解
问题分析与解决
错误原因
你遇到的TypeError: 'int' object is not callable错误,根源是覆盖了Python内置的input()函数。在代码第11行:
input = (int(input("number from 0-255")))
这里你把用户输入的整数赋值给了变量input,而input原本是Python用于获取用户输入的内置函数。当后续代码第105行再次尝试调用input("number from 0-255")时,input已经变成了一个整数,自然无法像函数一样被调用,从而触发错误。
修复步骤
- 重命名第一个输入变量,避免使用内置函数名作为变量名,比如改成
num1:# 原代码 input = (int(input("number from 0-255"))) # 修改后 num1 = int(input("number from 0-255")) - 把后续所有用到这个变量的地方(比如判断大小、减法操作等)都替换成新的变量名
num1,确保不再使用input作为变量。
修改后的核心代码片段
import sys info = bool(input("do you want extra info? (If not leave blank if yes enter anything)")) # 重命名变量,避免覆盖内置函数 num1 = int(input("number from 0-255")) if num1 > 255: sys.exit("Wrong") digit1 = 0 digit2 = 0 digit3 = 0 digit4 = 0 digit5 = 0 digit6 = 0 digit7 = 0 digit8 = 0 if num1 >= 128: num1 = num1 - 128 if info: print("above 128") print("New number:") print(num1) digit1 = 1 # 后续所有原input变量的地方都替换为num1,以此类推处理剩余判断逻辑
额外优化建议
你的代码中重复了大量二进制转换的逻辑,可以把这部分封装成一个函数,减少冗余:
def num_to_binary(num, info=False): digits = [0]*8 thresholds = [128,64,32,16,8,4,2,1] for i in range(8): if num >= thresholds[i]: num -= thresholds[i] digits[i] = 1 if info: print(f"above {thresholds[i]}") print(f"New number: {num}") return ''.join(map(str, digits))
之后调用这个函数即可完成转换:
info = bool(input("do you want extra info? (If not leave blank if yes enter anything)")) num1 = int(input("number from 0-255")) if num1 >255: sys.exit("Wrong") output = num_to_binary(num1, info) print("Your Input In binary is:") print(output) num2 = int(input("number from 0-255")) if num2 >255: sys.exit("Wrong") output2 = num_to_binary(num2, info) print("Your Input In binary is:") print(output2)
内容的提问来源于stack exchange,提问作者Mr Blue
相关产品推荐
相关产品推荐

