python: SyntaxError: EOL ao verificar literalmente a string


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
"""

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.


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.....\
...\
...."

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'))
  .....

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\\\


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.


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.


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

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.


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


2

Você pode tentar isso:

s = r'long\annoying\path'

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............"""

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'''

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 ............' ''


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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.