3 回答

TA貢獻1859條經驗 獲得超6個贊
您認為為什么0 % 2應該提高ZeroDivisionError?簡直就是0。
檢查數字是否為偶數時不需要例外,這絕對不是目的assert。相反,只需使用if:
if num % 2 == 0:
try:
reciprocal = 1/num
print(reciprocal)
except ZeroDivisionError as err:
print(err)
else:
print("Not an even number!")
是否應該使用異常來處理這種情況num == 0是一個風格問題(我個人也只是if在這里使用一個聲明)。在 Python 中,對這種情況使用異常處理比大多數其他語言更慣用。

TA貢獻1993條經驗 獲得超6個贊
“reciprocal = 1/num”行必須位于 try 部分。像這樣的東西:
# program to print the reciprocal of even numbers
num = int(input("Enter a number: "))
try:
assert num % 2 == 0
reciprocal = 1/num
print(reciprocal)
except ZeroDivisionError:
print(err)
except:
print("Not an even number!")

TA貢獻1853條經驗 獲得超9個贊
您沒有用...包裝正確的代碼try/except...num % 2 == 0不會引發 a ZeroDivisionError(因為沒有任何東西被零除...)并且無論如何它都在語句中assert...正如您從錯誤消息中看到的,錯誤來自reciprocal = 1/num這是在else部分中。
您應該使用錯誤處理包裝正確的代碼,assert可以單獨進行:
num = int(input("Enter a number: "))
assert num % 2 == 0, "Not an even number!"
try:
reciprocal = 1/num
print(reciprocal)
except ZeroDivisionError as err:
print(err)
除非您不希望引發(斷言)錯誤,否則您可以執行以下操作:
num = int(input("Enter a number: "))
try:
assert num % 2 == 0
reciprocal = 1/num
print(reciprocal)
except ZeroDivisionError as err:
print(err)
except AssertionError:
print("Not an even number!")
添加回答
舉報