无法在Python中解决TypeError消息

时间:2017-09-19 16:12:33

标签: python python-2.7

我一直在搜索为什么在第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 .......

2 个答案:

答案 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自动为字符串列表。使用

进行Typecast
int(value) 

使用它时将其用作整数。