【问题标题】:If else statement with try except block带有 try except 块的 if else 语句
【发布时间】:2019-09-10 16:31:43
【问题描述】:

我有一个要修改的try/except 代码块和一个if/else 语句,它将执行部分代码并跳过其他代码。

这是我现在拥有的逻辑存根:

if arg1 == 'None':
    do something
else:
    do something else

try:
    execute main code
except:
    update failed status

execute_seperate_function(arg)

我想要做的是如果代码进入第一个if statement,然后运行try/except 和最后一个函数。但是,如果它进入else statement,我想按原样运行try 代码,但跳过执行except 和最后一个函数。

有没有一种好方法可以做到这一点,而不是将所有内容都放在if/else 语句中并使代码变得非常混乱?任何帮助表示赞赏!

【问题讨论】:

  • 我不禁想到,所有省略的代码的确切性质会影响您选择如何构建它。

标签: python python-3.x if-statement try-except


【解决方案1】:

可以使它成为一个类似于下面的函数,带有一个标志参数来确定是否

def task(flag):
    if (flag == True):
        try:
            execute main code
        except:
            update failed status
        execute_seperate_function(arg)
    else:
        execute main code

if arg1 == 'None':
    task(True)
else:
    task(False)

这样更整洁吗?取决于我认为do something 是什么。

【讨论】:

  • execute main code 重复了吗? `真的吗?如果是 1000 行代码呢? If (flag == True) 不是很 Pythonic。
  • FWIW,最后一个if-else 可以通过调用task(arg1 == "None") 进一步消除。
【解决方案2】:

在某种程度上,这可以通过跨函数拆分逻辑来实现:

def do_something():
    try:
        execute_main_code()
    except Exception:
        update_failed_status()
    execute_separate_function(arg)


def do_something_else():
    execute_main_code()


def execute_main_code():
    pass


def update_failed_status():
    pass


def execute_separate_function(arg):
    pass


if arg1 == "None":
    do_something()
else:
    do_something_else()

【讨论】:

    【解决方案3】:

    首先,将你认为的“执行主代码”放入一个函数中,我们可以任意调用“main”:

    def main:
        execute main code
    
    if arg1 == 'None':
        try:
            main() # execute main code
        except Exception:
            update failed status
        execute_seperate_function(arg) # called whether there was an exception or not
    else:
        main() # just exec main code without try block
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-26
      • 2011-04-08
      • 1970-01-01
      • 1970-01-01
      • 2021-03-15
      • 2012-06-25
      相关资源
      最近更新 更多