Las comprensiones de la lista filtran su variable de bucle en Python2: cómo hacerlo compatible con Python3

Acabo de aprender de ¿Por qué las comprensiones de listas escriben en la variable de bucle, pero los generadores no? esa lista de comprensión también “filtra” su variable de bucle en el ámbito circundante .

Python 2.7.6 (default, Jun 22 2015, 17:58:13) >>> x = 'before' >>> a = [x for x in (1, 2, 3)] >>> x 3 

Este error se corrige en Python3.

 Python 3.4.3 (default, Oct 14 2015, 20:28:29) >>> x = 'before' >>> a = [x for x in (1, 2, 3)] >>> x 'before' 

¿Cuál es la mejor manera de hacer que Python2 sea compatible con Python3 en este momento?

Por lo general, la mejor forma es simplemente no reutilizar nombres de variables como esa, pero si desea algo que obtenga el comportamiento de Python 3 en 2 y 3:

 list(x for x in (1, 2, 3)) 

El comentario de @ mgilson es probablemente la verdad, pero si desea escribir código que funcione tanto en python2 como en python3, podría incluir una función de generador en una función de lista, por ejemplo:

 Python 2.7.6 (default, Jun 22 2015, 17:58:13) >>> x = 'before' >>> a = list(x for x in (1, 2, 3)) >>> x 'before'