如果用户尝试除以 10/'dog',我试图防止出现错误。即使在使用异常之后我仍然会收到错误

I am trying to prevent an error if the user tries to divide 10/'dog'. Even after using exception I still get error

Still getting Type and Value Error

def my_divider(a,b):         
    try:return a/b 
    
    except ZeroDivisionError:
        return"Error: You cannot divide a number by 0"
    
    except TypeError:         
        a=float(a)
        b=float(b)
        return a/b
    
    except ValueError:
        return"Please enter an integer"
  
var1=10
var2='dog'
print(my_divider(var1,var2))

首先,请将您的代码粘贴到问题中。

在你的例子中,TypeError 正在触发,但是你在调用 float('dog').

时导致了次要的 ValueError 异常

要解决此问题,您必须首先决定在这种情况下您希望发生什么。

您正在捕捉 TypeError,这是正确的。如果你 return 从这个 except 块返回一些字符串,你的程序将 运行 没有任何问题并打印 returned 字符串。但是你通过将 dog 转换为 string.

来筹集另一个 ValueError

请记住,所有这些 except 块都是一个 try 块。如果我在处理第一个异常时导致另一个异常,那么您尝试做的是好的,我将编写另一个 except 块,那将不起作用。您将不得不编写另一个 try-except 块。

我会附和@dkamins 在这里所说的话,但我需要代表所以我会在这里尝试一下。

您正在编写的代码看起来如此接近,当您看到它时,您会踢自己一脚。 try except 子句的大用处!您看起来已经像 python 专业人士了。是的,当您尝试在 isinstance(b,str) 时分配 b = float(b) 时会发生错误,但我认为,我看到您试图捕获该异常。但是由于它与 separate try-except 子句内联,因此它的行为与您所看到的一样。所以,像这样:

def my_divisor(a,b):

  try:

    return a/b

  except ZeroDivisionError:

    print("You cannot divide by the number 0")

    return None
  
  except TypeError:

    try:

      a = float(a)
      b = float(b)

      return a/b

    except ValueError:

      print('Error converting type of a, b to numeric. Just put in some numbers, pls')

      return None

小心!!!我们没有在这里处理任何事情。 my_divisor(40,"0") return 会是什么?我想你是从这里得到的朋友!