检查输入是字符串列表/元组还是单个字符串
我有一个方法,想让它能够接受单个字符串(比如一个路径,但不一定是机器上存在的路径)或者一个字符串的列表/元组。
因为字符串可以看作是字符的列表,我该怎么判断这个方法接收到的是什么类型呢?
我希望能够接受普通字符串或Unicode字符串作为单个输入,对于多个输入则可以接受列表或元组,所以用isinstance这个方法似乎不太合适,除非我有什么聪明的办法(比如利用共同的父类?)。
我使用的Python版本是2.5。
9 个回答
20
类型检查:
def func(arg):
if not isinstance(arg, (list, tuple)):
arg = [arg]
# process
func('abc')
func(['abc', '123'])
可变参数:
def func(*arg):
# process
func('abc')
func('abc', '123')
func(*['abc', '123'])
34
isinstance
是 一个选择:
In [2]: isinstance("a", str)
Out[2]: True
In [3]: isinstance([], str)
Out[3]: False
In [4]: isinstance([], list)
Out[4]: True
In [5]: isinstance("", list)
Out[5]: False
86
你可以检查一个变量是否是字符串或者unicode字符串,方法如下:
- 在Python 3中:
isinstance(some_object, str)
- 在Python 2中:
isinstance(some_object, basestring)
这个方法会对字符串和unicode字符串都返回 True
因为你使用的是Python 2.5,你可以这样做:
if isinstance(some_object, basestring):
...
elif all(isinstance(item, basestring) for item in some_object): # check iterable for stringness of all items. Will raise TypeError if some_object is not iterable
...
else:
raise TypeError # or something along that line
虽然“Stringness”可能不是个正式的词,但我希望你能明白我的意思。