Discuss / Python / 有序输出

有序输出

Topic source
from xml.parsers.expat import ParserCreate
from collections import OrderedDict

class WeatherSaxHandler(object):

    def __init__(self):
        self.weather = OrderedDict()  #定义一个有序字典 ,不然输出是无序的
        self.day = 0
        self.days = ['today','tomorrow']


    def start_element(self, name, attrs):
        if name == 'yweather:location':
            self.weather['city'] = attrs['city']
            self.weather['country'] = attrs['country']
        elif name == 'yweather:forecast':
            if self.day<2:
                self.weather[self.days[self.day]] = {}
                self.weather[self.days[self.day]]['text'] = attrs['text']
                self.weather[self.days[self.day]]['low'] = attrs['low']
                self.weather[self.days[self.day]]['high'] = attrs['high']
                self.day+=1

    def end_element(self, name):
        pass

    def char_data(self, text):
        pass

def parse_weather(xml):
    handler = WeatherSaxHandler()
    parser = ParserCreate()
    parser.StartElementHandler = handler.start_element
    parser.EndElementHandler = handler.end_element
    parser.CharacterDataHandler = handler.char_data
    parser.Parse(xml)

    return handler.weather

有个不懂的地方: parser.StartElementHandler这个方法我们并没有定义,所以是parser自带的吗?但是如果是自带的为什么我写parser. 后面pycharm并没有提示这个方法,甚至没有提示任何方法。这是怎么回事?求教

有个不懂的地方: parser.StartElementHandler这个方法我们并没有定义,所以是parser自带的吗?但是如果是自带的为什么我写parser. 后面pycharm并没有提示这个方法,甚至没有提示任何方法。这是怎么回事?求教

廖雪峰

#3 Created at ... [Delete] [Delete and Lock User]

因为IDE也很难对动态语言的源码准确推导出类型

你这个代码为什么用断言运行,会提示断言错误?


  • 1

Reply