【问题标题】:run multiple code blocks depending on "try" & "except" from previous block根据前一个块的“try”和“except”运行多个代码块
【发布时间】:2021-07-13 01:47:42
【问题描述】:

所以,我对“try”和 :except 代码行非常不熟悉,我不确定我是否正确执行此操作,但这就是我所在的位置。

try:
 code a
#
except Exception:
 code b
#
except:
 code c

所以,我要做的是让浏览器尝试“code a”,如果找不到“code a”,则尝试“code b”。如果有更简单的方法可以做到这一点,请告诉我。 “code c”是我在找到“code a”或“code b”后要运行的最后一行代码。 “code a”和“code b”都有 browser.refresh() 在其中,我希望它不断刷新页面,直到“code a”或“code b”找到它正在寻找的内容。但是,当它没有找到它要查找的内容时,它会刷新页面,但会显示“进程以退出代码 0 完成”,而不是刷新页面并再次重新启动脚本。它应该搜索页面,如果没有找到它正在寻找的内容,请刷新页面并重试,直到找到它,然后它继续“编码 c”。我也尝试过“finally”,但它会在“code a”和“code b”实际找到它要查找的内容之前继续“finally”。

我也试过这个。

try:
  code a
except Exception:
  pass
#
try:
  code b
except Exception:
  pass
#
try:
  code c
except Exception:
  pass

这些都不管用,我也没有,他们一直在完成这个过程,直到找到“代码 a”或“代码 b”。

任何帮助都会很棒!

提前致谢!

【问题讨论】:

    标签: python python-3.x selenium selenium-webdriver selenium-chromedriver


    【解决方案1】:

    这将继续尝试执行 code_a 和 code_b,直到其中一个运行没有错误,然后将退出主循环并运行 code_c。

    found_code = False
    while not found_code:
        try:
            code_a
            found_code=True
        except Exception:
            pass
        try:
            code_b
            found_code=True
        except Exception:
            pass
    code_c
    

    【讨论】:

      【解决方案2】:

      这个问题已经得到解答,但我相信 break 语句比 while 循环使用布尔变量更容易。此外,另一个答案将在每次循环运行时同时运行代码 a 和代码 b,而此代码运行问题中要求的 a 或 b。

      while True:
          try:
              code a
              break
          except:
              try:
                  code b
                  break
              except:
                  pass
      code c
      

      【讨论】:

        【解决方案3】:

        可以使用:suppress 来自:contexlib

        尝试类似:

        from contextlib import suppress
        
        
        def do_dangerous(code_to_run):
            with suppress(Exception):
                code_to_run()
                return True
            return False
        
        
        flag: bool = do_dangerous(code1) or do_dangerous(code2)
        if flag:
            code3()
        

        甚至更短:

        if do_dangerous(code1) or do_dangerous(code2):
           code3()
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-07-14
          • 1970-01-01
          • 1970-01-01
          • 2021-03-13
          • 2018-07-14
          相关资源
          最近更新 更多