3 回答

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

TA貢獻1780條經(jīng)驗 獲得超1個贊
您可以將多種類型傳遞給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貢獻1866條經(jīng)驗 獲得超5個贊
您的問題是if被評估為:
if (isinstance(radius, int)) or (isinstance(radius,float) == False)
我想這不是你的意思。
無論如何,您實際上可以通過使用try/except. 您可以假設(shè)您的參數(shù)是數(shù)字并與 進行比較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.")
添加回答
舉報