While it could be faster to do a try/except, it would really be cleaner to do either an explicit check or ``.get``. Possible to start with the non try/except route and change to this if warranted?

The complement maps could also be done as a numpy array trickery and would be faster than dicts though at the expense of some obfuscation:

```python
>>> import numpy as np
>>> a = np.zeros(85, dtype='|S1')
>>> a[65] = 'T'; a[84] = 'A'; a[71] = 'C'; a[67] = 'G'
>>> s = array(list("AATTGGCC"))
>>> a[map(ord, s)]
array(['T', 'T', 'A', 'A', 'C', 'C', 'G', 'G'],
      dtype='|S1')
```

Could probably be optimized a bit further to avoid the ``map(ord, ...)``