Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如果用户试图除以10/',我试图防止出现错误;狗';。即使使用了exception,我仍然会收到错误消息_Python_Typeerror_Valueerror - Fatal编程技术网

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

Python 如果用户试图除以10/',我试图防止出现错误;狗';。即使使用了exception,我仍然会收到错误消息,python,typeerror,valueerror,Python,Typeerror,Valueerror,首先,请在问题中粘贴你的代码 在您的情况下,TypeError正在触发,但是在调用float('dog')时,您将导致一个次要的ValueError异常 要解决这个问题,您必须首先决定在这种情况下要发生什么。您正在捕获正确的TypeError。如果从该块返回一些字符串,除了块,则程序将无任何问题运行并打印返回的字符串。但是,通过将dog转换为string,您正在引发另一个ValueError 请记住,除了块之外,所有这些块都用于一个try块。如果我在处理第一个异常时导致另一个异常,我将编写另一个


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

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


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

您正在捕获正确的
TypeError
。如果从该
块返回一些字符串,除了
块,则程序将无任何问题运行并打印返回的字符串。但是,通过将
dog
转换为
string
,您正在引发另一个
ValueError


请记住,除了块之外,所有这些
块都用于一个
try
块。如果我在处理第一个异常时导致另一个异常,我将编写另一个exception块,这将不起作用。您将不得不编写另一个
尝试,除了
块。

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

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

小心!!!我们这里没有处理什么事情。
我的除数(40,“0”)
会返回什么?我想你是从这里得到的,朋友

请在此处发布您的实际代码,而不仅仅是图像链接。请发布您的代码,而不是图像。不断尝试,代码看起来很奇怪。对不起,我希望它只是告诉用户“输入一个整数”,然后您需要重新构造代码,以循环输入+计算+打印,直到成功。异常处理程序无法完成此工作。它只会捕获异常(可能会打印错误),这样包含的循环就会知道如何再次运行。是的,但这太复杂了。你到底想要什么?你想要输入一个整数吗?那你为什么要转换成浮动呢?您想一直询问直到用户输入一个整数吗?您可以在
try
块中写入
返回浮点(a)/float(b)
,这样您就可以捕获
值错误
以及
类型错误
并相应地采取行动。谢谢。代码需要重新构造,我必须像你说的那样添加一个try块
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