检查输入是字符串列表/元组还是单个字符串

76 投票
9 回答
107289 浏览
提问于 2025-04-15 11:54

我有一个方法,想让它能够接受单个字符串(比如一个路径,但不一定是机器上存在的路径)或者一个字符串的列表/元组。

因为字符串可以看作是字符的列表,我该怎么判断这个方法接收到的是什么类型呢?

我希望能够接受普通字符串或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”可能不是个正式的词,但我希望你能明白我的意思。

撰写回答