【问题标题】:How to do if else statement in python如何在python中执行if else语句
【发布时间】:2016-04-30 08:23:24
【问题描述】:

我是一个 python/scrapy 新手。我正在尝试抓取一个网站进行练习,基本上当 data-src 存在时,我想使用 img::attr(data-src), 中的值/p>

def parse(self, response):

  for item in items:

    listing['img'] =  item.css('div img::attr(data-src)').extract()

否则如果 data-src 不存在则使用 img::attr(src)

listing['img'] =  item.css('div img::attr(src)').extract()

但问题是如何在 if 语句中做到这一点?

listing['img'] =  if item.css('div img::attr(data-src)'): item.css('div img::attr(data-src)').extract() else: item.css('div img::attr(src)').extract()

当然这样不行,而且有错误:

SyntaxError: invalid syntax

感谢您的帮助和意见!

【问题讨论】:

标签: python python-2.7 scrapy


【解决方案1】:

如果你正在寻找ternary operator,这里是它的语法:

a = "thing" if test else "other_thing"

所以在你的情况下:

listing['img'] = item.css('div img::attr(data-src)').extract() if item.css('div img::attr(data-src)') else item.css('div img::attr(src)').extract()

如果你想要if else condition,你可以这样做:

if test1:
  # your stuff
elif test2:
  # your other stuff

所以在你的情况下

if item.css('div img::attr(data-src)'):
  listing['img'] = item.css('div img::attr(data-src)').extract()
else:
  listing['img'] = item.css('div img::attr(src)').extract()

在我看来,在这种情况下它更具可读性。

【讨论】:

    【解决方案2】:

    也许是这样的:

    for item in items:
        if item.css('div img::attr(data-src)'): 
            listing['img'] = item.css('div img::attr(data-src)').extract() 
    
        else:
            listing['img'] = item.css('div img::attr(src)').extract()
    

    【讨论】:

    • 它就像一个魅力!感谢您的快速回复,@avstenit
    【解决方案3】:

    在 Python 中内联 if/else:

    result = "X was 2" if x == 2 else "X wasn't 2"
    

    虽然在大多数情况下更具可读性:

    if x == 2:
        # Do something
    else:
        # Do something else
    

    【讨论】:

      【解决方案4】:

      您为if 使用了错误的位置。它的工作原理如下:

      >>> x = 2
      >>> y = 3 if x==2 else 4
      >>> y
      3
      >>>
      

      因此,您必须将该行更改为:

      >>> listing['img'] = item.css('div img::attr(data-src)').extract() if item.css('div img::attr(data-src)') else item.css('div img::attr(src)').extract()
      

      【讨论】:

        【解决方案5】:

        在您的情况下,您可以执行以下操作:

        def parse(self, response):
        
            for item in items:
        
                if item.css('div img::attr(data-src)'):
        
                    listing['img'] = item.css('div img::attr(data-src)').extract() 
        
                else: 
        
                    listing['img'] = item.css('div img::attr(src)').extract()
        

        重要提示:注意 Python 中强制的缩进。

        【讨论】:

          【解决方案6】:

          为了让你的代码更短,你可以使用多个 css 选择器,使用 or 条件 ,

          div img::attr(data-src), div img::attr(src)
          

          所以它也应该对你有用,它很短然后if else 代码

          listing['img'] = item.css('div img::attr(data-src), div img::attr(src)').extract() 
          

          【讨论】:

          • 试过了,但不知何故这不起作用(结果相同),就好像其他一样。
          • @WillW 你能把网址分享给我吗?
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-06-17
          • 1970-01-01
          • 2012-01-08
          • 2022-12-14
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多