Ошибка: 'str' object cannot be interpreted as an integer в чем моя ошибка?

Код:

from os import *
from pickle import *

flag = True

while flag:
    print(f'{"AdressBook":_^20}')

    do = input('Добавить, удалить, искать:')
    do.lower

    system('cls')

    class Phone:
        def __init__(self, name, surname, number):
            self.name = name
            self.number = number
            self.surname = surname

        def add(self):
            fname = self.name + '.data'
            book = {
                'Имя': self.name,
                'Фамилия': self.surname,
                'Номер': self.number
            }
            f = open(fname, 'wb')
            dump(book, f)
            f.close()
            del book

        def delete(self):
            remove(self.name + '.data')
            print('Контакт удалён!')
        
        def search(self):
            fname = self.name + '.data'
            f = open(fname, 'rb')
            print(f'Контакт найден: {load(f)}')
    

    doName = input('Введите имя человека, которого хотите - добавить, удалить, найти:')

    if do == 'добавить':
        doSurname = input('Введите фамилию человека, которого хотите добавить:')
        doNumber = int(input('Введи номер человека, которого хотите добавить:'))
        phone = Phone(doName, doSurname, doNumber)
        phone.add()
        print('Контакт был добавлен!')

    elif do == 'удалить':
        phone = Phone(doName, surname=1, number=1)
        phone.delete()

    elif do == 'искать':
        phone = Phone(doName, surname=1, number=1)
        phone.search()

    flag = True if (input('Хотите выполнить ещё действия? (д/н):')) == 'д' else False
    system('cls')
raise SystemExit(1)

Ещё провел эксперимент. Если писать только цифры в ввод (не включая выбор, где надо выбрать - добавить, удалить, найти), то появляется та же самая ошибка: Фото ошибки TypeError

Но если вводить только буквы (не включая выбор, где надо выбрать - добавить, удалить или найти), то появляется другая ошибка:

Фото ошибки ValueError


Ответы (1 шт):

Автор решения: Эникейщик

Такое (и даже не такое!) бывает, когда делаешь импорт со звездочкой.

Функция open() из модуля os перекрыла встроенную функцию open(), а они требуют разных параметров.

Решение: импортировать модули без звездочки:

import os
import pickle

В некоторых местах придется подправить код (например, pickle.dump(book, f) вместо dump(book, f) и т.п.).

И никогда-никогда не импортировать модули, используя звездочку! Неизвестно какая функция какую перекроет, а потом замучаешься выяснять почему ошибки.

PS. do.lower надо заменить на do = do.lower(). Иначе эта строчка вообще ничего не делает.

→ Ссылка