任务:测试一个对象,是否是一个字符串,更准确说是这个对象是否具有类字符串的行为模式
解决方案:
一般程序员:
def isExactlyAstring(anobj):
return type(anobj) is type('')
这个方法并不是非常可用,unicode对象无法通过测试,自己编写的str的子类也不行
较好的方法:
使用内建的isinstance和basetring来简单快速检查某个对象是否是字符串或者Unicode对象:
def isAString(anobj):
return isinstance(anobj,basestring)
因为basestring是str和unicode类型的共同基类,这符合python的多态机制,但是该方法对标准库中的UserString类的实例并不可用,因为UserString并不是基于basestring派生的
更好的方法:
def isStringLike(anobj):
try: anobj+''
except: return False
else: return True
通过看对象anobj是否有类字符串的行为特征来判断他是不是字符串,当然我们也可以添加一些细节,使其更加完美
终极方法:
def isStringLike(anobj):
try: anobj.lower() + anobj + ''
except: return False
else: return True
这样isStringLike函数的功能基本满足需要了
本节也使用了python的异常处理机制,这个用来检测并处理由于不匹配产生的所有错误和异常。
It's easier to ask forgiveness than permission