ZeroDivisionError: as 'integer division or modulo by zero' but get as 'division by zero

ZeroDivisionError: as 'integer division or modulo by zero' but get as 'division by zero

我想得到 ZeroDivisionError 的异常:如 'integer division or modulo by zero',但我得到的是 'division by zero'。我怎样才能得到它?

a=int(input())
b=[]
for i in range(a):
    b.append(list(input().split()))
    try:
        print(int(int(b[i][0])/int(b[i][1])))
    except Exception as e:
        print( "Error Code: ", e)

Python 例外是 ZeroDivisionError:

>>> 1/0
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero

如果您正在尝试处理异常,请执行以下操作:

except ZeroDivisionError as e:

而不是尝试匹配异常描述。

如果此答案无法满足您的需求,请详细说明您的需求和原因,以便我们为您提供帮助。

PS 一种完成您似乎要问的事情的天真的方法:

>>> try: 1/0
... except ZeroDivisionError:
...  raise ZeroDivisionError('integer division or modulo by zero')
... 
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 3, in <module>
ZeroDivisionError: integer division or modulo by zero

我确定您有理由想要特定的错误消息(也许是为了理解 floatint 的区别)所以我会解决这个问题。

即使只有一个除以零的异常 (ZeroDivisionError),它也会根据使用的类型和涉及的操作给出不同的错误消息。

如果您尝试获取整数除法异常消息 ("integer division or modulo by zero"),则需要专门使用 // 而不是 / 来执行整数除法。在除法之前或之后使用 int() 将数字转换为整数不会使 / 执行整数除法。

作为错误消息如何根据所涉及的类型而变化的示例:

>>> 5 / 0
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero
>>> 5.0 / 0.0
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ZeroDivisionError: float division by zero
>>> 5 // 0
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ZeroDivisionError: integer division or modulo by zero
>>> 5.0 // 0
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ZeroDivisionError: float divmod()

以上内容属于 Python 3. / 在 Python 2 中分母为零的两个 int 对象的除法将导致 "integer division or modulo by zero" 消息。