3 回答

TA貢獻(xiàn)1810條經(jīng)驗(yàn) 獲得超4個(gè)贊
好像你想要
if not (isinstance(radius, int) or isinstance(radius,float)):
或者實(shí)際上
if not isinstance(radius, (float, int)):
目前你的邏輯是這樣的
if isinstance(radius, int) or (isinstance(radius,float) == False):
所以,如果你有一個(gè) int,那么你就會(huì)得到錯(cuò)誤。如果你得到一個(gè)浮動(dòng),你就不會(huì)出錯(cuò),因?yàn)槟阕罱K得到False or (True == False)
任何事物or False
都等同bool(Anything)
于 ,在本例中,True == False
,即False
此外,我建議首先提出所有錯(cuò)誤并檢查條件。
然后只返回實(shí)際的數(shù)學(xué),因?yàn)槟菚r(shí)變量不可能是正的

TA貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超1個(gè)贊
您可以將多種類型傳遞給isinstance,這樣您就可以擺脫or:
def cone(radius, height):
if not isinstance(radius, (float, int)):
raise TypeError("Error: parameters radius and height must be numeric.")
if not isinstance(height, (float, int)):
raise TypeError("Error: parameters radius and height must be numeric.")
if radius > 0 and height > 0:
return ((radius*radius)*(3.1415)*(height/3))
if radius<=0:
raise ValueError("Error: radius must be positive.")
if height <=0:
raise ValueError("Error: height must be positive.")
for value in [(1, 2), (0.33, 'foo')]:
print(cone(*value))
輸出:
0.0
Traceback (most recent call last):
File "/private/tmp/s.py", line 15, in <module>
print(cone(*value))
File "/private/tmp/s.py", line 5, in cone
raise TypeError("Error: parameters radius and height must be numeric.")
TypeError: Error: parameters radius and height must be numeric.

TA貢獻(xiàn)1866條經(jīng)驗(yàn) 獲得超5個(gè)贊
您的問(wèn)題是if被評(píng)估為:
if (isinstance(radius, int)) or (isinstance(radius,float) == False)
我想這不是你的意思。
無(wú)論如何,您實(shí)際上可以通過(guò)使用try/except. 您可以假設(shè)您的參數(shù)是數(shù)字并與 進(jìn)行比較0。如果不是,將引發(fā)異常以便您可以捕獲它:
def cone(radius, height):
try:
if radius > 0 and height > 0:
return ((radius*radius)*(3.1415)*(height/3))
else:
raise ValueError("Error: radius and height must be positive.")
except TypeError:
raise TypeError("Error: parameters radius and height must be numeric.")
添加回答
舉報(bào)