Estaba creando una larga lista de cadenas como esta:
tlds = [ 'com', 'net', 'org' 'edu', 'gov', ... ] Me perdí una coma después 'org' . Python lo concatenó automáticamente con la cadena en la siguiente línea, en 'orgedu' . Esto se convirtió en un error muy difícil de identificar.
Ya hay muchas formas de definir cadenas de varias líneas, algunas muy explícitas. Entonces, me pregunto si hay alguna manera de deshabilitar este comportamiento en particular.
Lo platónico correcto es modificar el linter. Pero creo que la vida es demasiado corta para hacerlo, además del hecho de que si el próximo codificador no sabe sobre tu linter modificado, su vida sería un infierno.
No debería avergonzarse de asegurarse de que la entrada, incluso si está codificada, es válida. Si fuera por mí, implementaría una solución manual como esta:
tlds = [ 'com', 'net', 'org' 'edu', 'gov', ] redone = ''.join(tlds) chunk_size = 3 tlds = [ redone[i:i+chunk_size] for i in range(0, len(redone), chunk_size) ] # Now you have a nice `tlds` print(tlds) Puedes olvidarte de las comas, escribir dos elementos en la misma línea, o incluso en la misma cadena todo lo que quieras. También puede invitar a colaboraciones de código desprevenidos para que lo estropeen, el texto se rehará de tres en tres ( chunk_size ) más adelante de todos modos si eso está bien con su aplicación.
EDITAR: Más adelante en la nota de @Jasmijn, creo que hay un enfoque alternativo si tenemos un tamaño dinámico de entradas, podemos usar la entrada literal como esta:
tlds = ['''com net org edu gov nl co.uk'''] # This way every line is an entry by its own as seen directly without any quotations or decorations except for the first and last inputs. tlds = '\n'.split(tlds)¿Por qué no simplemente envuelves las cadenas en str(…) ?. Si olvida una coma, se generará un SyntaxError .
tlds = [ str('com'), str('net'), str('org') str('edu'), str('gov'), str('nl'), str('co.uk') ] Si todos estos str son demasiados, puede crear un alias temporal:
s = str tlds = [ s('com'), s('net'), s('org') s('edu'), s('gov'), s('nl'), s('co.uk') ] (Nota: este código genera intencionalmente un SyntaxError ; para eliminarlo, se debe agregar la coma que falta)