Oh, right.  That is because strings are sequences.  Here is a better version that should work, written as a generator:

```python
def _flatten(iterable):
    for el in iterable:
        if isinstance(el, basestring):
            yield el
        elif isinstance(el, collections.Iterable):
            for subel in _flatten(el):
                yield subel
        else:
            yield el
```

Here is an example of use:

```python
In [8]: [x for x in _flatten(["hello", None, (1, 3, (2, 5, 6))])]
Out[8]: ['hello', None, 1, 3, 2, 5, 6]
```

This has the advantages of handling more types than tuples and lists, more memory efficient, and avoids the expensive try-except block.