2012-02-28 21 views
14

así que estoy escribiendo un guión que se lee de un archivo de configuración, y quiero usarlo exactamente cómo ConfigParser está diseñado para ser usado según lo explicado aquí: http://docs.python.org/release/3.2.1/library/configparser.htmlConfigParser Python no aceptará claves sin valores

soy usando Python 3.2.1. El script, cuando se complete, se ejecutará en una máquina con Windows 2008 R2 utilizando la misma versión de Python, o asumiendo la compatibilidad, la última versión en ese momento.

#!/user/bin/env python 
import configparser 

config = configparser.ConfigParser() 
config.read('c:\exclude.ini') 
config.sections() 

Eso funciona bien para leer el archivo exclude.ini - a menos que tenga un valor sin una llave. Pensando que podría estar haciendo algo mal intentaron analizar el ejemplo aparece aquí: http://docs.python.org/release/3.2.1/library/configparser.html#supported-ini-file-structure

Todavía tiros el siguiente cada vez que:

File "C:\Python32\lib\configparser.py", line 1081, in _read 
    raise e 
configparser.ParsingError: Source contains parsing errors: c:\exclude.ini 
    [line 20]: 'key_without_value\n' 

Estoy en una pérdida ... Estoy literalmente copiar/pegar el código de ejemplo de la documentación para la versión exacta de Python que estoy usando y no funciona como debería. Solo puedo suponer que me estoy perdiendo algo, ya que tampoco puedo encontrar a nadie con un problema similar.

Respuesta

12

El ConfigParser constructor tiene una palabra clave argumento allow_no_value con un valor predeterminado de False.

Intenta configurar eso como verdadero, y apuesto a que funcionará para ti.

+0

Excelente, gracias Karl. Tal vez debería enviarles una nota sugiriendo que cambien su ejemplo .ini para poner un comentario encima de esa sección señalando que esa parte solo funciona si se cambia el constructor. Supongo que debería haber leído toda la documentación, pero la forma en que se establecieron las cosas me pareció que debería haber funcionado así por defecto. – Sparc

+0

Esto funciona incluso si la sección es el siguiente: [Software] 3700 Diario Copiar 1.0.2 Adobe Flash Player 11 ActiveX Adobe Reader X (10.1.7) - Deutsch DotNet Framework 4.0 [...] – enthus1ast

0
class RawConfigParser: 
def __init__(self, defaults=None, dict_type=_default_dict, 
      allow_no_value=False): 
    self._dict = dict_type 
    self._sections = self._dict() 
    self._defaults = self._dict() 
    if allow_no_value: 
     self._optcre = self.OPTCRE_NV 
    else: 
     self._optcre = self.OPTCRE 
    if defaults: 
     for key, value in defaults.items(): 
      self._defaults[self.optionxform(key)] = value 

ConfigParser importación

cf = ConfigParser.ConfigParser (allow_no_value = True)

Cuestiones relacionadas