如果用户试图除以10/“dog”,我试图防止出现错误。即使使用了exception,我仍然会收到错误消息

2024-05-19 12:25:17 发布

您现在位置:Python中文网/ 问答频道 /正文

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))

Tags: andreturnvaluemydeftypeerrorfloat
3条回答

首先,请在问题中粘贴你的代码

在您的情况下,TypeError正在触发,但是在调用float('dog')时,您将导致一个次要的ValueError异常

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

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

你正在编写的代码看起来非常接近,当你看到它时,你会踢自己。try-except子句的大量使用!你看起来已经像个python高手了。是的,当您试图在isinstance(b,str)时分配b = float(b)时会发生错误,但我认为,您正在尝试捕获该异常。但是由于它与一个separatetry 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

小心!!!我们这里没有处理什么事情。{}会返回什么?我想你是从这里得到的,朋友

您正在捕获TypeError,这是正确的。如果您从这个except块返回一些字符串,您的程序将毫无问题地运行并打印返回的字符串。但是你通过把dog转换成string来提高另一个ValueError

请记住,所有这些except块都用于一个try块。如果我在处理第一个异常时导致另一个异常,我将编写另一个exception块,这将不起作用。您必须编写另一个try-except

相关问题 更多 >