【问题标题】:ZeroDivisionError even after using try and exceptZeroDivisionError 即使在使用 try 和 except 之后
【发布时间】:2020-10-22 15:44:58
【问题描述】:
# program to print the reciprocal of even numbers

num = int(input("Enter a number: "))

try:
    assert num % 2 == 0

except ZeroDivisionError:
    print(err)

except:
    print("Not an even number!")

else:
    reciprocal = 1/num
    print(reciprocal)

代码不起作用并给我以下错误:

---------------------------------------------------------------------------
ZeroDivisionError                         Traceback (most recent call last)
<ipython-input-41-ce890375558f> in <module>
      8     print("Not an even number!")
      9 else:
---> 10     reciprocal = 1/num
     11     print(reciprocal)

ZeroDivisionError: division by zero

【问题讨论】:

  • 你没有用try/except包装正确的代码...num % 2 == 0不会引发ZeroDivisionError(因为没有任何东西被零除...)而且无论如何它都在一个assert 声明...从错误消息中可以看出,错误来自reciprocal = 1/num,它位于else 部分...
  • 另外 num % 2 不是检查 num == 0 -- 它是检查一个数字是否是偶数。

标签: python python-3.x


【解决方案1】:

“reciprocal = 1/num”行必须在 try 部分。像这样的:

# program to print the reciprocal of even numbers

num = int(input("Enter a number: "))

try:
    assert num % 2 == 0
    reciprocal = 1/num
    print(reciprocal)

except ZeroDivisionError:
    print(err)

except:
    print("Not an even number!")

【讨论】:

    【解决方案2】:

    为什么你认为0 % 2 应该提高ZeroDivisionError?它只是 0。

    检查数字是否为偶数时不需要例外,这绝对不是assert的目的。相反,只需使用if:

    if num % 2 == 0:
        try:
            reciprocal = 1/num
            print(reciprocal)
        except ZeroDivisionError as err:
            print(err)
    else:
        print("Not an even number!")
    

    是否应该使用异常来处理num == 0 的情况是一种风格问题(我个人也会在这里使用if 语句)。在 Python 中,对此类情况使用异常处理比在大多数其他语言中更为惯用。

    【讨论】:

      【解决方案3】:

      您没有用try/except 包装正确的代码...num % 2 == 0 不会引发ZeroDivisionError(因为没有任何内容被零除...)而且无论如何它都在assert 语句中。 .. 从错误消息中可以看出,错误来自reciprocal = 1/num,它位于else 部分中。

      你应该用错误处理包装正确的代码,assert 可以分开:

      num = int(input("Enter a number: "))
      
      assert num % 2 == 0, "Not an even number!"
      try:
          reciprocal = 1/num
          print(reciprocal)
      except ZeroDivisionError as err:
          print(err)
      

      除非您不想引发(断言)错误,否则您可以执行以下操作:

      num = int(input("Enter a number: "))
      
      try:
          assert num % 2 == 0
          reciprocal = 1/num
          print(reciprocal)
      
      except ZeroDivisionError as err:
          print(err)
      
      except AssertionError:
          print("Not an even number!")
      

      【讨论】:

        猜你喜欢
        • 2020-08-19
        • 1970-01-01
        • 1970-01-01
        • 2016-04-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多