I'm sorry to say it but this really is one of the few cases where using isinstance() makes sense. However one of the other answers that suggests testing for list is doing it backwards: str (and for Python 2.x unicode) are the anomalous types so those are the ones you test for:
def test(a,b):
x = []
if isinstance(b, str): b = [b]
x.extend(a)
x.extend(b)
return x
or for Python 2.x test isinstance(b, basestring).