Praw “no pudo analizar CPython sys.version” al crear el objeto Reddit

Recibo este error al crear un objeto reddit. Aquí está el código:

import praw, requests, ctypes r = praw.Reddit(user_agent="Wallpaper downloader") 

Aquí está el error:

Rastreo (llamadas recientes más última):

 File "C:/Python27/background.py", line 3, in  r = praw.Reddit(user_agent="Wallpaper downloader") File "C:\Python27\lib\site-packages\praw\__init__.py", line 1028, in __init__ super(AuthenticatedReddit, self).__init__(*args, **kwargs) File "C:\Python27\lib\site-packages\praw\__init__.py", line 502, in __init__ super(OAuth2Reddit, self).__init__(*args, **kwargs) File "C:\Python27\lib\site-packages\praw\__init__.py", line 615, in __init__ super(UnauthenticatedReddit, self).__init__(*args, **kwargs) File "C:\Python27\lib\site-packages\praw\__init__.py", line 280, in __init__ self.handler = handler or DefaultHandler() File "C:\Python27\lib\site-packages\praw\handlers.py", line 70, in __init__ self.http = Session() # Each instance should have its own session File "C:\Python27\lib\site-packages\requests\sessions.py", line 176, in __init__ self.headers = default_headers() File "C:\Python27\lib\site-packages\requests\utils.py", line 461, in default_headers 'User-Agent': default_user_agent(), File "C:\Python27\lib\site-packages\requests\utils.py", line 430, in default_user_agent _implementation = platform.python_implementation() File "C:\Python27\lib\platform.py", line 1458, in python_implementation return _sys_version()[0] File "C:\Python27\lib\platform.py", line 1423, in _sys_version repr(sys_version)) ValueError: failed to parse CPython sys.version: '2.7.3 |EPD_free 7.3-2 (32-bit)| (default, Apr 12 2012, 14:30:37) [MSC v.1500 32 bit (Intel)]' 

Instalé presa usando pip, y estoy usando Windows. ¿Alguna idea de por qué tengo este error?

Esto parece ser un error en la EPD.

Que esta pasando:

Platforms.py intenta, en la función _sys_version (a la que llama python_implementation , como muestra el seguimiento de la stack), en algunos casos, analiza sys.version con una expresión regular. En su caso, cree que está ejecutando CPython (¿es usted? CPython es la versión normal de Python, no es algo como Jython o IronPython), y ese es el caso en el que se ejecuta la expresión regular. La expresión regular:

 _sys_version_parser = re.compile( r'([\w.+]+)\s*' '\(#?([^,]+),\s*([\w ]+),\s*([\w :]+)\)\s*' '\[([^\]]+)\]?') 

Y el código que lo ejecuta:

 else: # CPython match = _sys_version_parser.match(sys_version) if match is None: raise ValueError( 'failed to parse CPython sys.version: %s' % repr(sys_version)) version, buildno, builddate, buildtime, compiler = \ match.groups() name = 'CPython' builddate = builddate + ' ' + buildtime 

El código es bastante simple: está generando el error porque la expresión regular no coincide. En cuanto a la expresión regular:

 r'([\w.+]+)\s*' '\(#?([^,]+),\s*([\w ]+),\s*([\w :]+)\)\s*' '\[([^\]]+)\]?') 

Esa primera parte, ([\w.+]+)\s* , coincide [a-zA-Z0-9_.+] separadas por espacios de [a-zA-Z0-9_.+] – la función indica que este es el número de versión. Es probable que coincida con el “2.7.3” correctamente.

La segunda parte es mucho más interesante. El código sugiere que está buscando un buildno , y el regex parece indicar que está buscando un paren literal ( ( ). Lo vemos más adelante en su cadena: (default, Apr 12 2012, 14:30:37)

Pero esta parte está en el camino: |EPD_free 7.3-2 (32-bit)| . Mi conjetura es que la expresión regular no espera eso, y eso es lo que está causando que se ahogue.

Como arreglarlo:

A corto plazo, para probar esta teoría, intente eliminarlo en Python. Simplemente asigne a sys.version , algo como,

 # This raises an exception for you: platform.python_implementation() # Try this: sys.version = '2.7.3 (default, Apr 12 2012, 14:30:37) [MSC v.1500 32 bit (Intel)]' # Hopefully, this no longer raises. platform.python_implementation() 

Si eso lo soluciona, probablemente querrá deshacerse de él a largo plazo. Supongo que esto es Enthought Python Distribution Free – probablemente tendrás que presentar un error allí, ya que probablemente es algo que han hecho.

Como un lado, hay algunas rarezas aquí. El literal debe tener esas barras invertidas dobladas, o ser una cadena en bruto. (Creo que la r del primer literal no se transfiere, sin embargo, un escape desconocido termina siendo una barra o lo que sea, por lo que todavía funciona).

He estado experimentando el mismo problema. Acabo de enviar una corrección de errores para ello.

Tuvo el mismo problema, lo solucioné cambiando PythonPath a la instalación de Anaconda (tuve una instalación previa de Python).