2011-04-26 3 views
5

필자는 Python을 처음 사용하고 XML을 읽는 연습 프로젝트를 작성하려고합니다. 어떤 이유로이 if 문은 빈 공백 행에 대해서도 트리거됩니다.Legit python if 문?

if '<' and '>' in line: 

이유가 무엇입니까?

+0

왜이 진술을 작성 했습니까? 이런 코드를 어디에서 보았습니까? 이게 어떻게되어 있다고 생각하니? –

답변

9

코드는 (명확성을 위해 parethesised) 말한다 : 당신이 의도하지 않는 경우 귀하의 경우 true로 평가

if True and ('>' in line): 

:

if '<' and ('>' in line): 

로 평가한다. 그래서, 대신 시도 (괄호는 선택 사항이지만 명확성을 위해 추가) :

if ('<' in line) and ('>' in line): 
+4

'true 일 경우 ('>>') ': 항상 사실입니까? '또는'를 사용하면 나는 그것을 볼 수 있었다. –

+0

이제 내 괄호도 섞어 버렸습니다 .-P 고정 ... –

+0

대화식 프롬프트에서 실제로 입력 해 보셨습니까? 'in'과'and'의 상대적인 우선 순위는 괄호가없는이 경우 정확하며'True in '''은 항상'True'를 리턴하지는 않습니다.'TypeError'를 발생시킵니다. – ncoghlan

9

당신은 아마 원하는 :

if ('<' in line) and ('>' in line): 

버전이이 해석되고있다 :

if ('<') and ('>' in line): 

당신이 무슨 뜻인지 아마 아닙니다.

괄호를 사용하면 사물을 매우 분명하게 나타낼 수 있습니다.

+0

이것은 정확하지만 OP 문제를 설명하지는 않습니다 (즉,'line == '''OP의 표현식이 오류에도 불구하고'False'를 반환해야하는 경우). – ncoghlan

2

시도 :
if '<' in line and '>' in line:

나는 다이빙 전에 파이썬에서 책을 읽고 좋을 것

, 당신은 을 피할 것 많이 함 함정 :

3

파일에서 빈 줄을 칠 때 line이 정말로 비어있는 것이 확실합니까? 당신이 '<' and '>' in line을 쓸 때

는 인터프리터는 '<' and ('>' in line)로하는 당신이 원하는 아니라고 본다 : 더 '<' in line and '>' in line 또는 all(x in line for x in '<>') 같은 후입니다. 하지만 원본을 포함하여 그 표현은 모두 line이 비어있는 경우에는 사실이 아닙니다. 의 잘못된 형식은이지만, 문자열에 '>' 만 포함되어 있으면 잘못된 답을 제공합니다. 에 관계없이

>>> '<' and '>' in '' 
False 
>>> '<' and '>' in '<' 
False 
>>> '<' and '>' in '>' # Huh? 
True 
>>> 1 and 0 in [0] # Perhaps this will clarify matters 
True 

는 손으로 XML을 구문 분석하지 않습니다 - 사용하는 XML 파싱 라이브러리를 같은 표준 라이브러리에 포함 된 xml.etree.ElementTree 모듈로.