Python布尔表达式总是为真(实际上不该如此)

2 投票
2 回答
1900 浏览
提问于 2025-04-16 19:18

我有一个方法,目的是从一些HTML中获取所有的图片元素,并添加一个CSS样式,以确保如果图片太大,就会被调整大小。这个方法运行得很好,直到最后一个测试:largest_size < img_size。我尝试了各种不同的方式来表达这个简单的逻辑,但它总是评估为真,这意味着所有的图片都会被调整大小,不管它们原来的大小是多少。

代码如下:

    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

我知道这里肯定有什么简单的错误,只是我看不出来 :)

2 个回答

0

img_size 是一个字符串,而不是整数:

>>> 30720 < '0'
True
4

int(整数)总是比 str(字符串)小。首先把你的头部值转换成 int 类型。记住,调试的时候用 repr(),而不是 str()

撰写回答