This topic created in 4152 days ago, the information mentioned may be changed or developed.
问题:判断来两个变量dataA,dataB是否为str类型,一个是则输出'Ture'
方法1:if dataA==type(dataA) or dataB==type(dataB):
print ’True‘
方法2:if dataA==str(dataA) or dataB==str(dataB):
print ’True‘
现在的问题:第二个方法中的str(dataA)的执行是否会有错误,即Python中强制转换是否可行?如果不行能否给我一个反例
12 replies • 2015-01-29 18:44:57 +08:00
 |
|
2
raquelken Jan 29, 2015
python里面判断类型的方法是 isinstance
|
 |
|
3
broono Jan 29, 2015
不应该是这样吗: if isinstance(dataA,'str') and isinstance(dataB,'str'): print 'True'
|
 |
|
5
hush Jan 29, 2015
上面的两个方法都能运行得到效果,但就第二种不全面
|
 |
|
6
hahastudio Jan 29, 2015
你的问题大概是你觉得找到了
>>> s = "a" >>> isinstance(s, str) True >>> type(s) == str True >>> class bar(str): def __init__(self): pass
>>> b = bar() >>> type(b) == str False >>> isinstance(b, str) True
然后你要知道 x.__str__() <==> str(x) 就可以了 str(x) 就相当于其他语言的 x.ToString()
|
 |
|
8
buru Jan 29, 2015
肯定不会有错误的 ,每个类型都有__str__方法 @ hush
|
 |
|
9
hush Jan 29, 2015 via Android
|
 |
|
10
Valyrian Jan 29, 2015
方法一是错的,左边是str右边是type 方法二也是错的,如果dataA类型的__eq__()方法允许和str相等的话
建议isinstance(dataA, str)或者type(dataA) == type("")
|
 |
|
11
Valyrian Jan 29, 2015
补充一句,如果dataA是一个str的子类,isinstance()会true,type(dataA) == type("")会false 所以你如果想要dataA是严格的str就用type(dataA) == type(""),如果不在乎是子类就用isinstance()
|
 |
|
12
zhicheng Jan 29, 2015
>>> isinstance('abc', str) True >>> isinstance(u'abc', str) False >>> isinstance('abc', unicode) False >>> isinstance(u'abc', unicode) True >>> isinstance('abc', basestring) True >>> isinstance(u'abc', basestring) True
|