【问题标题】:How can a function only take positive number?一个函数怎么只能取正数?
【发布时间】:2021-01-10 09:47:18
【问题描述】:

我是 python 新手,目前正在学习 python 中的错误处理。有一个练习我想解决但不知道如何解决。

函数接收r的值并返回音量 领域。如果 r 等于或小于零被传递给 该函数,该函数返回错误数据的通知 进入。

防止函数崩溃。期间如有异常 执行时,函数必须返回错误消息。

我的代码

import math
def vol(r):
    try:
        return (4/3*math.pi*r**3)           
      
    except TypeError:
        return "A type error has occurred."
    

当我测试 print(vol(-3)) 时,结果是 -113.09733552923254,但它应该警告我这个数字小于 0。

【问题讨论】:

  • 为什么你认为它应该警告你?您不会在实现中检查 r 的值。
  • Coderunner 将此标记为错误,因为预期的输出是“您输入了错误的值”。我的代码会返回它的音量,即使它是 0。
  • 检查 r 的值,如果为负,则引发 ValueError 异常。检查如何在 python 中引发异常
  • 对,因为您的实现检查值。 r**3 可以计算r 的负值就好了,即使在这种情况下它没有物理意义,它也不会抛出错误。
  • 返回错误信息的要求是糟糕的设计。 调用者可以根据需要使用try/except 捕获异常。

标签: python error-handling


【解决方案1】:

当然,即使你输入负值,它也会返回一个数字。因为输入负值时不会出现错误。

如果你想让它发生错误,请使用raiseif

这里是例子

import math
def vol(r):
    try:
        if r <= 0:
            raise TypeError
        return (4/3*math.pi*r**3)           
      
    except TypeError:
        return "A type error has occurred."

【讨论】:

    【解决方案2】:

    编辑:如果您不想引发异常,您也可以在控制台中打印出正常的错误消息。

    import math
    def vol(r):
        if(r <= 0):
            raise ValueError("Radius should be greater than 0")
        return (4/3*math.pi*r**3)  
    

    【讨论】:

      【解决方案3】:

      根据您的 cmets,我猜您一定是在尝试解决编码挑战,即在给定特定输入的情况下需要特定输出。

      预期的输出是“您输入了错误的值。”

      应该警告我该数字小于 0

      虽然我认为自己解决这类挑战会更好,但这里有一个可能的解决方案。

      import math
      
      def vol(r):
          try:
              # You weren't checking the value of r
              if r < 0:
                  raise ValueError
      
              return (4 / 3 * math.pi * r**3)           
            
          except ValueError:
              # If a ValueError occurs, return the string expected for the challenge
              return ("You entered incorrect values.")
      

      【讨论】:

        猜你喜欢
        • 2019-08-03
        • 1970-01-01
        • 2023-03-07
        • 1970-01-01
        • 2015-11-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多