我一直在搜索为什么在第7行有一个TypeError,它说我的参数在字符串格式化期间没有被转换但是有用。
有没有人可以帮助我,让我知道我的代码到底出了什么问题,以便我能够纠正自己。
以下是我的代码的参考资料。
import sys
even, odd = [], []
count_odd, count_even = 0, 0
for value in sys.argv[1:]:
if value % 2 == 0: #TypeError: not all arguments converted during string formatting
even.append(value)
total_even = sum(even)
count_even += 1
elif value % 2 == 1:
odd.append(value)
total_odd = sum(odd)
count_odd += 1
else:
print "Please enter valid integers."
diff = max(sys.argv[1:]) - min(sys.argv[1:])
sys.argv[1:].remove(max(sys.argv[1:]))
sys.argv[1:].remove(min(sys.argv[1:]))
mean = sum(sys.argv[1:])/3
print .......
答案 0 :(得分:6)
命令行参数属于str
类型。
在字符串上使用%
时,您正在调用格式化运算符,并且由于您的字符串不包含任何%
,因此您会收到这条奇怪的消息。
一旦你知道:
,修复很简单if int(value) % 2 == 0:
会这样做
(please enter valid integers
部分不起作用,如果参数不是整数,则必须捕捉ValueError
当您尝试在参数列表中使用max
时,您将遇到的下一个奇怪错误。将使用错误的排序(词典编纂)
最好的方法是事先将你的arglist转换为整数,并处理该列表。
让我提出一个自包含的例子来计算奇数和甚至列表和差异,使用更多的pythonic技术(也更高性能,例如:无需计算每次迭代的数字总和):
import sys
even, odd = [], []
argument_list = ["1","10","24","15","16"] # sys.argv[1:]
integer_list = [int(x) for x in argument_list] # let python signal the conversion errors and exit
for value in integer_list:
# ternary to select which list to append to
(odd if value % 2 else even).append(value)
total_even = sum(even)
total_odd = sum(odd)
count_even = len(even) # if you need that
count_odd = len(odd)
diff = max(integer_list) - min(integer_list)
答案 1 :(得分:0)
sys.argv自动为字符串列表。使用
进行Typecastint(value)
使用它时将其用作整数。