零除误差:作为"整数除法或模数为零",但得到为"除以零"



我想得到ZeroDivisionError的例外:作为'整数除法或以零模',但我得到'除零'。我怎样才能得到它呢?

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一个naïve完成你似乎要求的方法:

>>> 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"消息。

最新更新