저는 파이썬을 처음 접하고 XML 파일을 HTML로 바꾸는 유틸리티를 다루고 있습니다. XML은 request = urllib2.Request(url)
에 대한 호출에서 가져옵니다. 코드의 앞부분에 사용자 정의 URL을 생성 한 다음 response = urllib2.urlopen(request)
을 설정하고 마지막으로 xml_response = response.read()
을 설정합니다. 이것은 내가 할 수있는 한 괜찮습니다.Python :이 문자열은 인쇄되지만 파일에 쓰지 않는 이유는 무엇입니까?
내 문제는 응답을 구문 분석하는 것입니다. 우선, 여기에 내가 돌아올 XML 구조의 일부 예는 다음과 같습니다
나는 그런데, 여기에 이베이 검색 결과 내 XML을 (구문 분석 minidom 튜토리얼에서 슬라이드 쇼 예를 적응 노력) : http://docs.python.org/2/library/xml.dom.minidom.html
내 코드는 지금까지 문제를 진단하기위한 시도로 시도 블록과 함께 다음과 같습니다 : 올바른 제목 텍스트가 conso로 인쇄 않는 이유
이doc = minidom.parseString(xml_response)
#Extract relevant information and prepare it for HTML formatting.
try:
handleDocument(doc)
except:
print "Failed to handle document!"
def getText(nodelist): #taken straight from slideshow example
rc = []
for node in nodelist:
if node.nodeType == node.TEXT_NODE:
print "A TEXT NODE!"
rc.append(node.data)
return ''.join(rc) #this is a string, right?
def handleDocument(doc):
outputFile = open("EbaySearchResults.html", "w")
outputFile.write("<html>\n")
outputFile.write("<body>\n")
try:
items = doc.getElementsByTagName("item")
except:
"Failed to get elements by tag name."
handleItems(items)
outputFile.write("</html>\n")
outputFile.write("</body>\n")
def handleItems(items):
for item in items:
title = item.getElementsByTagName("title")[0] #there should be only one title
print "<h2>%s</h2>" % getText(title.childNodes) #this works fine!
try: #none of these things work!
outputFile.write("<h2>%s</h2>" % getText(title.childNodes))
#outputFile.write("<h2>" + getText(title.childNodes) + "</h2>")
#str = getText(title.childNodes)
#outputFIle.write(string(str))
#outputFile.write(getText(title.childNodes))
except:
print "FAIL"
이해가 안가 le하지만 예외를 throw하고 출력 파일에 대해 작동하지 않습니다. 이처럼 평범한 문자열을 작성하는 것은 잘 작동합니다 : outputFile.write("<html>\n")
문자열 구성은 어떻게됩니까? 제가 말할 수있는 한, minidom 예제에서 사용하고있는 getText
메서드는 문자열을 반환합니다. 이것은 파일에 쓸 수있는 일종의 것입니다. 뭔가 같은
------------------------------------------------------------
Traceback (most recent call last):
File "tohtml.py", line 85, in handleItems
outputFile.write(getText(title.childNodes))
NameError: global name 'outputFile' is not defined
------------------------------------------------------------
이 보이는
이 범위를 벗어난 간 :
* * 예외는 무엇입니까? 스택 추적을 포함한 전체 오류 메시지를 게시하십시오. – kindall
여기 왜 이렇게 많은 질문이 '예외'라고 말하거나 스택 추적없이 메시지를주는 것은 정말로 유용한 디버깅 정보이며, 왜 아무도 * 포함하지 않는 이유는 무엇입니까? 그것은 나를 괴롭힌다. –
필자는 실수가 전문가 프로그래머에게 명백하게 드러날 것이라고 생각한다. 그러나 스택 트레이스를 출력하는 방법을 배우고 단순히'NameError : global name 'outputFile'이 정의되지 않았다 '는 것을 발견하면 즉시 문제를 볼 수있었습니다. 수업은 배웠다. :-) – nicole