Грешка при отпечатване на низ и float

if __name__ == "__main__":
    fptr = open(sys.argv[1], 'r')
    for line in fptr:
        list1 = []
        s = ''
        for item in re.findall(r'[\S]+', line):
            try:
                list1.append(int(item))
            except:
                s = s + item + ' '
        if not len(list1) == 0:
            avg = sum(list1) / len(list1)
            print(list1)
            print(s)
            print(avg)
            print("{0:.3f} {}".format(avg, s)) //ERROR OCCUR

Това е стандартният изход:

[12, 14, 5, 20]
From sample set A
12.75
Traceback (most recent call last):
  File "./parse.py", line 28, in <module>
    print("{0:.3f} {}".format(avg, s))
ValueError: cannot switch from manual field specification to automatic field numbering

Изглежда низът и средната стойност могат да бъдат отпечатани поотделно. Но защо не мога да ги отпечатам заедно?


person BadEggX    schedule 02.11.2014    source източник
comment
Тъй като номерирането на полетата ви не е последователно, както ви казва съобщението за грешка; използвайте "{0:.3f} {1}" или "{:.3f} {}", но бъдете последователни.   -  person jonrsharpe    schedule 02.11.2014


Отговори (1)


Python се оплаква, че сте номерирали първото поле за формат, но не и второто. Или ги номерирайте и двете:

print("{0:.3f} {1}".format(avg, s))
#       ^       ^

или изобщо не ги номерирайте:

print("{:.3f} {}".format(avg, s))

Обърнете внимание обаче, че второто решение работи само в Python 2.6 или по-нова версия.

person Community    schedule 02.11.2014
comment
А.. това не го забелязах. Сега работи. Благодаря ти! - person BadEggX; 02.11.2014