Вы можете проверить, является ли переменная строкой или строкой Юникода с помощью
isinstance(some_object, basestring)
Это вернет True
как для строк, так и для строк Unicode
Edit:
Вы можете сделать что-то вроде этого:
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
Строгость, вероятно, не слово, но я надеюсь, что вы поняли