仅当所有try语句在Python中都成功时才运行语句

时间:2019-06-06 10:30:24

标签: python python-3.x try-catch

我正试图做某事:

try:
  database_insert_1()  # insert sth to table_1
  database_insert_2()  # insert sth to table_2
except Exception as e:
  print(e.message)

我希望database_insert_1database_insert_2仅在它们都可以成功运行时才执行。

我在上面的操作方式将带来一个问题,即使只有database_insert_1失败,database_insert_2仍将成功执行。

用例是两个表共享相同的架构,我希望这两个表是一致的,并且不希望只有其中一个被更新。

如何解决以上问题?非常感谢。

2 个答案:

答案 0 :(得分:0)

您可以稍稍修改您的代码即可使用,需要使其更具层次感:

import scrapy

class CBNCSpider(scrapy.Spider):
    name = 'kontan'
    start_urls = [
        'https://investasi.kontan.co.id/rubrik/28/Emiten'
    ]

    def parse(self, response):
        for crawl in response.xpath("//*[@id='list-news']//*[@class='ket']"):
            d = {}
            d['title'] = crawl.css("h1 > a::text").get()
            d['source'] = response.urljoin(crawl.css("h1 > a::attr(href)").get())
            d['date'] = crawl.css("span.font-gray::text").get().strip("|")
            yield scrapy.Request(
                url=d['source'],
                callback=self.parseparagraph,
                meta={'item':d}
             )

    def parseparagraph(self, response):
        items_old = response.meta['item']
        items_old['paragraph'] = response.xpath("//p/text()").getall()
        yield items_old

答案 1 :(得分:0)


例如,如果您使用sql数据库,则将游标传递到函数中,而不在插入函数中提交

cursor = conn.cursor()
try:
    database_insert_1(cursor)  # insert sth to table_1
    database_insert_2(cursor)  # insert sth to table_2
    cursor.commit

except Exception as e:
    print(e.message) 

因此,如果您在任何一个函数中均出错,那么它将跳至异常,并且不会更新任何数据库。