2011-06-10 65 views
2

我有一个方法,旨在从一些html抓取所有img元素,并添加一个css样式,以确保图像大小调整。它的工作很好,直到最后的测试:最大尺寸< img_size - 我已经尝试过所有不同的方式来表达这个简单的事情,但它总是评估为真 - 这意味着所有图像都调整大小,无论其原始大小。Python布尔表达式总是为真(当它不应该是)

代码:

def adjust_html(self, html_text): 
    # pull image links and adjust those larger than 30k 
    # to be width=100% 
    html = etree.HTML(html_text) 
    r = html.xpath('.//img') 
    changed_text = False 
    for elem in r: 
     for tag, value in elem.attrib.iteritems(): 
      if tag == 'src': 
       largest_size = 30720 
       img_size = 0 
       img_url = value 
       if self.bad_urls.has_key(img_url): 
        break 
       try: 
        usock = urllib2.urlopen(img_url) 
        img_size = usock.info().get('Content-Length') 
       except: 
        self.log.debug("***** 406 for " + img_url) 
        self.bad_urls[img_url] = True 
        break 
       if img_size is None: 
        break 
       else: 
        **if (largest_size < img_size):** 
         self.log.debug("*** " + img_url + " ***") 
         self.log.debug("********** img size = " + str(img_size) + " **********") 
         elem.set("style","width:100%") 
         changed_text = True 
       break 

    if changed_text == True: 
     html_text = etree.tostring(html) 

    return html_text 

我知道必须有东西在这里简单的错误 - 我只是没有看到它:)

+0

标记的代码有趣的部分用''**通常是一个坏主意。在有趣的部分之前和之后放置一些'#comments'。 – eumiro 2011-06-10 06:49:03

+0

是img_size实际上是一个int?首先将您的调试语句更改为'img_size =%d'%img_size – 2011-06-10 06:51:46

回答

4

int总是小于str。首先将您的标题值变为int。请记住,使用repr()进行调试,而不是str()

+0

+1。今晚是什么样的网络......这个直到我发布后才显示出来。 – 2011-06-10 06:53:43

+0

谢谢你们 - 太快了!这不是一个整数,哈哈 - 我习惯于输入语言。 – Pete 2011-06-10 07:06:10

+0

Python *是*键入的。它是强烈的动态类型。 – 2011-06-10 07:16:32

0

img_size是一个字符串不是一个int:

>>> 30720 < '0' 
True 
+0

是的!谢谢 :) – Pete 2011-06-10 07:07:38