Как убрать ошибку TypeError: '_io.TextIOWrapper' object is not callable?

Рейтинг: 0Ответов: 1Опубликовано: 16.06.2023

При решении задачи на питоне

Столкнулся с ошибкой

"C:\py\dfdfdf.py", line 26, in <module>
    if ((f(s[p]) and not f(s[p+1])) or (not f(s[p]) and f(s[p+1]))):
TypeError: '_io.TextIOWrapper' object is not callable

Сам код:


def f(n):
    n=str(n)
    flag=True
    for j in range(len(n)-1):
        if int(n[j])>=int(n[j+1]):
            flag=False
            break
    return flag
with open('a.txt')as f:
    s=[int(x)for x in f]
    m=100000000
    for i in s:
        i=str(i)
        flag=True
        for j in range(len(i)-1):
            if int(i[j])<=int(i[j+1]):
                flag=False
                break
        if flag:
            m=min(int(i),m)
    sum=0
    for i in str(m):
        sum+=int(i)
    a=[]
    for p in range(len(s)-1):
        **if ((f(s[p]) and not f(s[p+1])) or (not f(s[p]) and f(s[p+1]))):**
            if  s[p]*s[p+1]%sum==0:
                a.append(int(s[p])+int(s[p+1]))
    print(len(a),min(a))

Объясните, плиз, что это за тип ошибок.

Ответы

▲ 4Принят

Вы определяете функцию f

def f(n):
    ...

Но потом входите в контекст, в котором f - открытый файл:

with open('a.txt')as f:
    ...

В этом контексте название вашей функции перекрыто. Вам нужно использовать другую переменную для функции или для файла.

Поскольку вы спрашиваете, что это за тип ошибок:

call - вызов - это когда вы пишете круглые скобочки после объекта, вызываете его (для функций - это их "исполнение" с заданными аргументами или без, для классов это инициализация).

За наличие у объектов такого функционала отвечает метод __call__. Cоответственно, питон вам говорит, что у класса _io.TextIOWrapper такого метода нет.