python: SyntaxError: EOL ao verificar literalmente a string

164

Eu tenho o erro mencionado acima em s1="some very long string............"

Alguém sabe o que estou fazendo de errado?

eu--''''''---------''''''''''''
fonte
1
Tem certeza de que está sendo fechado corretamente e não há aspas sem escape em algum lugar?
precisa saber é o seguinte
As aspas sem escape geram outro erro de análise.
janc

Respostas:

224

Você não está colocando um "antes do final da linha.

Use """se você quiser fazer isso:

""" a very long string ...... 
....that can span multiple lines
"""
aaronasterling
fonte
17
E cuidado para só usar três aspas, eu tive quatro por acidente e o erro surgiu
Orégano
1
Que tal concatenar seqüências de caracteres e variáveis?
Daniel Springer
92

Eu tive esse problema - acabei descobrindo que o motivo era que eu incluí \caracteres na string. Se você tiver alguma dessas opções, "escape" delas \\e ela deve funcionar bem.

Chris H
fonte
2
@ Leo eles são chamados de 'caracteres de escape', e isso é bastante padrão. Você pode colocar um rantes da string para evitar que eles causem problemas.
eric
17

(Supondo que você não tenha / queira quebras de linha na sua string ...)

Quanto tempo dura essa string?

Eu suspeito que há um limite para quanto tempo uma linha pode ser lida em um arquivo ou na linha de comando e, como o final da linha é cortado, o analisador vê algo como s1="some very long string..........(sem final ") e, portanto, gera um erro de análise?

Você pode dividir linhas longas em várias linhas, escapando as quebras de linha em sua fonte desta maneira:

s1="some very long string.....\
...\
...."
JanC
fonte
8

Na minha situação, eu tinha \r\nem minhas cadeias de dicionário de aspas simples. Substituí todas as instâncias de \rwith \\re \nwith \\ne ele corrigiu meu problema, retornando corretamente quebras de linha escapadas no ditado avaliado.

ast.literal_eval(my_str.replace('\r','\\r').replace('\n','\\n'))
  .....
Nicolas Bouliane
fonte
6

Eu enfrentei um problema semelhante. Eu tinha uma string que continha o caminho para uma pasta no Windows, por exemplo, C:\Users\o problema é que \é um caractere de escape e, portanto, para usá-lo em strings, você precisa adicionar mais um \.

Incorreta: C:\Users\

Corrigir: C:\\\Users\\\

Ashish kulkarni
fonte
4

Eu também tive esse problema, embora houvesse respostas aqui, quero um ponto importante para isso depois que /não deve haver espaços vazios.

madhu131313
fonte
2

Eu também recebi essa mensagem de erro exata. Para mim, o problema foi corrigido adicionando um "\"

Acontece que minha longa corda, dividida em oito linhas com "\" no final, estava faltando um "\" em uma linha.

O Python IDLE não especificou um número de linha em que esse erro estava ativado, mas destacou em vermelho uma instrução de atribuição de variável totalmente correta, o que me excitou. A instrução de cadeia de caracteres deformada real (várias linhas com "\") era adjacente à instrução sendo destacada. Talvez isso ajude alguém.

user12711
fonte
2

No meu caso, eu uso o Windows, então tenho que usar aspas duplas em vez de simples.

C:\Users\Dr. Printer>python -mtimeit -s"a = 0"
100000000 loops, best of 3: 0.011 usec per loop
Aminah Nuraini
fonte
2

Eu estava recebendo esse erro na função postgresql. Eu tinha um SQL longo, que dividi em várias linhas com \ para melhor legibilidade. No entanto, esse era o problema. Eu removi todos e os criei em uma linha para corrigir o problema. Eu estava usando o pgadmin III.

Ram Dwivedi
fonte
2

No meu caso com o Mac OS X, tive a seguinte declaração:

model.export_srcpkg(platform, toolchain, 'mymodel_pkg.zip', 'mymodel.dylib’)

Eu estava recebendo o erro:

  File "<stdin>", line 1
model.export_srcpkg(platform, toolchain, 'mymodel_pkg.zip', 'mymodel.dylib’)
                                                                             ^
SyntaxError: EOL while scanning string literal

Depois de mudar para:

model.export_srcpkg(platform, toolchain, "mymodel_pkg.zip", "mymodel.dylib")

Funcionou...

David

us_david
fonte
2

Você pode tentar isso:

s = r'long\annoying\path'
ZakS
fonte
1
Essa é a melhor resposta. Também pode tentar s = r'long\annoying\path\\'.
shahar_m 13/01
1

Seu variable(s1)abrange várias linhas. Para fazer isso (ou seja, você deseja que sua cadeia de caracteres abranja várias linhas), é necessário usar aspas triplas ("" ").

s1="""some very long 
string............"""
Khandelwal-manik
fonte
1

Nesse caso, três aspas simples ou três duplas irão funcionar! Por exemplo:

    """Parameters:
    ...Type something.....
    .....finishing statement"""

OU

    '''Parameters:
    ...Type something.....
    .....finishing statement'''
Areeha
fonte
0

A maioria das respostas anteriores está correta e minha resposta é muito semelhante a aaronasterling, você também pode fazer 3 citações simples s1 = '' 'alguma sequência muito longa ............' ''

grepit
fonte
0

Eu havia enfrentado o mesmo problema ao acessar qualquer diretório de disco rígido. Então eu resolvi dessa maneira.

 import os
 os.startfile("D:\folder_name\file_name") #running shortcut
 os.startfile("F:") #accessing directory

insira a descrição da imagem aqui

A imagem acima mostra um erro e uma saída resolvida.

Md.Rakibuz Sultan
fonte