Soy nuevo en Python e intento crear un proyecto de práctica que lea algunos XML. Por alguna razón, esta instrucción if se activa incluso para líneas blancas en blanco:Legit python if statement?
if '<' and '>' in line:
¿Alguna idea de por qué?
Soy nuevo en Python e intento crear un proyecto de práctica que lea algunos XML. Por alguna razón, esta instrucción if se activa incluso para líneas blancas en blanco:Legit python if statement?
if '<' and '>' in line:
¿Alguna idea de por qué?
Su código dice (parethesised para mayor claridad):
if '<' and ('>' in line):
que será evaluado:
if True and ('>' in line):
que en su caso se evalúa como true
cuando no se tiene la intención de. Por lo tanto, probar este lugar (entre paréntesis son opcionales, pero agregó que para mayor claridad):
if ('<' in line) and ('>' in line):
¿Cómo es 'if true y ('>' en línea):' siempre verdadero? Podría ver si usa 'o'. –
Ahora también tiene mye mezclando mis pares :-P Fixed ... –
¿De verdad trataste de escribir algo de eso en el prompt interactivo? La precedencia relativa de 'in' y' and' es correcta en este caso sin paréntesis y 'True in ''' no siempre devuelve 'True', sino que levanta' TypeError'. – ncoghlan
es probable que desee:
if ('<' in line) and ('>' in line):
Su versión está siendo interpretado como esto:
if ('<') and ('>' in line):
que no es probable que lo que quería decir.
Use paréntesis para hacer las cosas súper obvias.
Esto es exacto, pero no explica el problema del OP (es decir, si 'line == ''' la expresión del OP todavía debe devolver 'False' a pesar de su error). – ncoghlan
Probar:
if '<' in line and '>' in line:
me gustaría sugerir la lectura de un libro sobre Python antes de la inmersión, evitará un montón de trampas :)
¿Cómo está usted seguro de que line
es realmente vacío cuando se golpea una línea en blanco en el archivo?
Cuando se escribe '<' and '>' in line
el intérprete ve que como '<' and ('>' in line)
que no es lo que quiere: lo que busca es algo más parecido a '<' in line and '>' in line
o all(x in line for x in '<>')
. Ninguna de esas expresiones, incluida su original, será verdadera cuando line
esté vacía. La forma incorrecta de la expresión será, pero dará una respuesta incorrecta cuando la cadena contenga solo '>'
.
>>> '<' and '>' in ''
False
>>> '<' and '>' in '<'
False
>>> '<' and '>' in '>' # Huh?
True
>>> 1 and 0 in [0] # Perhaps this will clarify matters
True
pesar de todo, no analizar XML con la mano - utilizar una biblioteca de análisis XML, tales como el módulo de xml.etree.ElementTree
incluido en la biblioteca estándar.
¿Por qué escribió esta afirmación? ¿Dónde has visto código como este? ¿Qué crees que se supone que debe hacer esto? –