编写奇偶及4倍数校验器时触发TypeError,请求错误原因分析
问题分析与解决:TypeError: not all arguments converted during string formatting
错误根源
你触发这个TypeError的核心原因是:num是input()获取的字符串类型,Python中字符串的%是字符串格式化操作符,不是数学取模运算。
比如输入5时,num的值是字符串"5",执行num % 2时,Python会把它当成字符串格式化尝试——相当于执行"%s" % 2,但原字符串里没有对应的占位符,因此抛出"not all arguments converted during string formatting"错误。
你代码里虽然把num转成了整数val,但后续判断全程用的还是原始字符串num,完全没用到转换后的val,这才是问题的关键。
修正后的代码
num = input("number:") try: val = int(num) if val % 4 == 0: print("this number is even and divisible by 4!") elif val % 2 == 0: print("this number is even") else: print("this number is odd") except ValueError: print("bro just put a number")
修正说明
- 所有取模运算都使用转换后的整数
val,而非原始字符串num - 移除了判断4的倍数时冗余的偶数检查(能被4整除的数必然是偶数,无需额外判断)
- 清理了
input语句里多余的括号和重复引号
内容的提问来源于stack exchange,提问作者dariocodes
相关产品推荐
相关产品推荐

