【问题标题】:python: try/except/else and continue statementpython:try/except/else 和 continue 语句
【发布时间】:2017-10-04 14:45:49
【问题描述】:

为什么下面的 python 代码 sn -p NOT 的输出只是 No exception:1,因为在第一次迭代期间没有引发异常。来自 python 文档 (https://docs.python.org/2.7/tutorial/errors.html)。

try ... except 语句有一个可选的 else 子句,当 现在,必须遵循所有 except 子句。它对以下代码很有用 如果 try 子句没有引发异常,则必须执行。

$ cat hello.py
for x in range(1,10):
  try:
    if x == 1:
        continue
    x/0
  except Exception:
    print "Kaput:%s" %(x)
  else:
    print "No exception:%s" %(x)
    break

$ python hello.py
  Kaput:2
  Kaput:3
  Kaput:4
  Kaput:5
  Kaput:6
  Kaput:7
  Kaput:8
  Kaput:9

 $ python -V
 Python 2.7.8

【问题讨论】:

  • 请注意我的目的不是让代码工作。这是一个玩具示例,我更想知道为什么该行为与教程文档所说的不符?如果有解释此行为原因的文档或 python 规范,请提供参考。

标签: python python-2.7


【解决方案1】:

这是因为 continue 语句...它将控制权转移到 for 语句...尝试删除 continue 并为 x/0 添加条件语句,例如 if(x!=1): x/0 然后看你想要的输出..

【讨论】:

    【解决方案2】:

    本教程提供了一个良好的开端,但不是语言参考。 Read the reference here.

    特别注意:

    如果控制从 try 子句的末尾流出,则执行可选的 else 子句。

    由脚注 2 澄清:

    目前,除了发生异常或执行 return、continue 或 break 语句的情况外,控制“从末尾流出”。

    因此,您对continue 的使用已明确解决。

    【讨论】:

      【解决方案3】:

      这与您对continuebreak 的使用有关。我认为这是您想要的功能。基本上,continue 不会跳到else 语句,而是继续执行代码(通过了 try 语句)。而且,break 打破了 for 循环,因此不再产生输出,所以我删除了该语句。

      for x in range(1,10):
        try:
          if x != 1:
              x/0
        except Exception:
          print "Kaput:%s" %(x)
        else:
          print "No exception:%s" %(x)
      

      【讨论】:

        【解决方案4】:

        您的代码有一个continue,因此它永远不会到达else 块。要达到你的结果,你不能到continue

        代码:

        for x in range(1, 10):
            try:
                if x != 1:
                    x / 0
            except Exception:
                print "Kaput:%s" % (x)
            else:
                print "No exception:%s" % (x)
                break
        

        结果:

        No exception:1
        

        【讨论】:

          猜你喜欢
          • 2017-02-18
          • 2014-04-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-10-09
          • 1970-01-01
          • 2012-06-25
          • 1970-01-01
          相关资源
          最近更新 更多