【问题标题】:Breaking from nested try/except blocks in python打破python中的嵌套try/except块
【发布时间】:2020-09-23 04:06:09
【问题描述】:

以下代码有两个 try/except 块。如果内部代码失败,它会引发异常,但之后仍会继续下一个代码。是否有可能一进入except块就从所有块中打破?

try:
    try:
        print(a)
    except:
        print('Inner')
        # should break from here and exit the script
    print(k)
except Exception as e:
    print('Outer')

上面的代码打印了Inner,但也因为没有定义k而抛出了一个异常。 Outer 也不应该被打印出来。

【问题讨论】:

  • 它打印的是内部外部,你的意思是什么?
  • @E.Serra 添加了评论
  • 我不太确定你想做什么。假设你想跳转到外​​部的 except 块,你可以简单地在内部的 except 中写“引发异常”
  • print('Inner') 行之后放置exit(0) 是否如您所愿?
  • 应该从这里中断并退出脚本 - 然后只需执行sys.exit()

标签: python try-except


【解决方案1】:

我认为您在使用 try...except 并包含可选的 else 子句:

try:
    try:
        print(a)
    except:
        print('Inner')
    else:
        print(k)
except Exception as e:
    print('Outer')

如果未定义a,将打印Inner,如果定义a,将打印Outer

【讨论】:

    【解决方案2】:

    这将避免打印外部异常->

    try:
        try:
            print(a)
        except:
            print('Inner')
        try:
            print(k)
        except:
            print('Inner for k')
    except Exception as e:
        print('Outer')
    

    你可以使用一个函数来避免剩余的命令

    def printvars():
        try:
            try:
                print(a)
            except:
                print('Inner')
                return 
            try:
                print(k)
            except:
                print('Inner for k')
        except Exception as e:
            print('Outer')
    
    

    我会避免使用 catch-all 异常,这会导致很多意想不到的结果。

    【讨论】:

      猜你喜欢
      • 2013-11-21
      • 1970-01-01
      • 2013-08-11
      • 1970-01-01
      • 1970-01-01
      • 2016-08-30
      • 1970-01-01
      • 2014-08-23
      • 2020-11-26
      相关资源
      最近更新 更多