以下代码显示错误:
if ((type(varA) or type(varB) ) == type('t')):
print "string involved"
elif varA<varB:
print "RANDOM"
错误适用于这种情况:
Test Values: varA = 0, varB = adios
输出:
RANDOM
而另一段代码
if ((type(varA) == type('t')) or (type(varB)== type('t'))):
print "string involved"
elif varA<varB:
print "RANDOM"`
对于以下测试值:
Test Values: varA = 6, varB = adios
输出如下:
string involved
这两个“如果”条件有什么区别?我发现它们具有相同的逻辑!
答案 0 :(得分:5)
这是错误的:
if ((type(varA) or type(varB) ) == type('t')):
应该是:
if type(varA) == str or type(varB) == str:
等效地:
if isinstance(varA, str) or isinstance(varB, str):
或者更短一些:
if str in ((type(varA), type(varB)):
答案 1 :(得分:1)
问题在于这个表达式:
if ((type(varA) or type(varB) ) == type('t')):
编程语言不像英语那样工作。上面的第一个评估type(varA) or type(varB)
,这将产生varA
的类型 - 因为or
返回第一个真值,任何类型都是真实的。
然后它会检查是否与type('t')
相同 - 即str
。这意味着当varA
是字符串时,它才会成立,varB
的类型将被完全忽略。
你想要的可能就是:
if type(varA) == type('t') or type(varB) == type('t'):
但是有更多的惯用/ Pythonic方法可以做到这一点;请参阅ÓscarLópez的答案。
答案 2 :(得分:1)
如果您希望测试适用于str
的子类,那么最好使用isintance
代替type
if any(isinstance(x, str) for x in (varA, varB)):
...