2
respostas

TypeError: expected str ... not tuple

Olá, Eu preparei o arquivo dados.py com a definição do leitor (PyCharm, Python3.7, pip 20-1) :

import csv
def carregar_acessos():
    dados = []
    marcacoes = []
    arquivo = open('acesso.csv', 'r')
    leitor = csv.reader(arquivo)
    for acessou_home,acessou_como_funciona,acessou_contato,comprou in leitor:
        dados.append([acessou_home, acessou_como_funciona, acessou_contato])
        marcacoes.append(comprou)
    return dados, marcacoes

Coloquei o arquivo 'acesso.csv' na mesma pasta . Ao rodar os comandos no console Python (Via PyCharm), tive o seguinte retorno:

from dados import carregar_acessos
dados,marcacoes = carregar_acessos()
Traceback (most recent call last):
  File "<input>", line 1, in <module>
  File "C:\Users\tomfm\Workspaces\PycharmProjects\Classificacao\dados.py", line 8, in carregar_acessos
    arquivo = open('acesso.csv', 'r')
TypeError: expected str, bytes or os.PathLike object, not tuple

Cheguei a mudar a chamada do open() mas não resolveu. O estranho é que pelo prompt do Windows, no Console do Python não dá problema, apenas pelo console do PyCharm. Mas eu estou chamando o mesmo programa, daí a minha dúvida. Neste projeto eu não deveria usar o console do PyCharm?

2 respostas

Não entendi o motivo, mas uma coisa que resolveu foi o seguinte: No PyCharm eu fechei a janela de console Python que estava com esse erro.

Depois abri novamente (eu acho que ele reiniciou o console Python). Aí deu tudo certo... Eu acho que aquela instância do Python estava pegando o "erro" do open(). A outra instância de alguma forma não acusou erro nenhum.

Porém não entendi o que aquele erro significava... Enfim, vamos continuando...

Olá Tomas.

Imagino que em algum momento foi colocado 2 parênteses na função open e dessa maneira a função entendeu que você estava mandando uma tupla no parâmetro, essa tupla formada pelas string 'acesso.csv' e 'r' e dessa maneira gerando esse erro:

>>> arquivo = open(('acesso.csv', 'r'))
 Traceback (most recent call last):
      File "<stdin>", line 1, in <module> 
TypeError: expected str, bytes or os.PathLike object, not tuple
>>>     

Que bom que conseguiu resolver e espero ter conseguido esclarecer melhor o erro, qualquer duvida não hesite em perguntar.

Bons Estudos.