Tutorial :Check if input is a list/tuple of strings or a single string



Question:

I've a method that I want to be able to accept either a single string (a path, but not necessarily one that exists on the machine running the code) or a list/tuple of strings.

Given that strings act as lists of characters, how can I tell which kind the method has received?

I'd like to be able to accept either standard or unicode strings for a single entry, and either lists or tuples for multiple, so isinstance doesn't seem to be the answer unless I'm missing a clever trick with it (like taking advantage of common ancestor classes?).

Python version is 2.5


Solution:1

You can check if a variable is a string or unicode string with

isinstance(some_object, basestring)  

This will return True for both strings and unicode strings

Edit:

You could do something like this:

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 is probably not a word, but I hope you get the idea


Solution:2

Type checking:

def func(arg):      if not isinstance(arg, (list, tuple)):          arg = [arg]      # process    func('abc')  func(['abc', '123'])  

Varargs:

def func(*arg):      # process    func('abc')  func('abc', '123')  func(*['abc', '123'])  


Solution:3

isinstance is an option:

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  


Solution:4

As I like to keep things simple, here is the shortest form that is compatible with both 2.x and 3.x:

# trick for py2/3 compatibility  if 'basestring' not in globals():     basestring = str    v = "xx"    if isinstance(v, basestring):     print("is string")  


Solution:5

Check the type with isinstance(arg, basestring)


Solution:6

>>> type('abc') is str  True  >>> type(['abc']) is str  False  

This code is compatible with Python 2 and 3


Solution:7

Have you considered varargs syntax? I'm not really sure if this is what you're asking, but would something like this question be along your lines?


Solution:8

Can't you do:

(i == list (i) or i == tuple (i))  

It would reply if the input is tuple or list. The only issue is that it doesn't work properly with a tuple holding only one variable.


Note:If u also have question or solution just comment us below or mail us on toontricks1994@gmail.com
Previous
Next Post »