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

前端 未结 9 1194
执念已碎
执念已碎 2020-12-24 05:13

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 strin

相关标签:
9条回答
  • 2020-12-24 05:17

    Check the type with isinstance(arg, basestring)

    0 讨论(0)
  • 2020-12-24 05:22

    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?

    0 讨论(0)
  • 2020-12-24 05:23

    I'm surprised no one gave an answer with duck typing, but gave unclear or highly type-dependent or version-dependent answers. Also, the accepted answer unfortunately has separate code for Python 2 and 3. Python uses and encourages duck typing, so (one line more than sorin's "shortest form" which is not duck typing) I instead recommend:

    def is_str(v):
        return hasattr(v, 'lower')
    

    ...and whatever other attributes you want to use (remember the quotes). That way, client code using your software can send whatever kind of string they want as long as it has the interface your software requires. Duck typing is more useful in this way for other types, but it is generally the best way.

    Or you could also do this (or generally check for AttributeError and take some other action):

    def is_str(v):
        try:
            vL = v.lower()
        except AttributeError:
            return False
        return True
    
    0 讨论(0)
  • 2020-12-24 05:26

    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
    
    0 讨论(0)
  • 2020-12-24 05:26
    >>> type('abc') is str
    True
    >>> type(['abc']) is str
    False
    

    This code is compatible with Python 2 and 3

    0 讨论(0)
  • 2020-12-24 05:31

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

    • Python 3:
        isinstance(some_object, str)
    
    • Python 2:
        isinstance(some_object, basestring)
    

    This will return True for both strings and unicode strings

    As you are using python 2.5, 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

    0 讨论(0)
提交回复
热议问题