2012-02-28 13 views
14

Così sto scrivendo uno script che legge da un file di configurazione, e voglio usarlo esattamente come ConfigParser è progettato per essere utilizzato come descritto qui: http://docs.python.org/release/3.2.1/library/configparser.htmlPython ConfigParser non accetterà le chiavi senza valori

Sono usando Python 3.2.1. Lo script, una volta completato, verrà eseguito su un computer Windows 2008 R2 utilizzando la stessa versione di Python o, se si assume la compatibilità, l'ultima versione al momento.

#!/user/bin/env python 
import configparser 

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

Che funziona bene per leggere il file exclude.ini - a meno che non abbia un valore senza chiave. Pensando Potrei fare qualcosa di sbagliato provato analizzando l'esempio elencati qui: http://docs.python.org/release/3.2.1/library/configparser.html#supported-ini-file-structure

getta ancora la seguente ogni volta:

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' 

Sono in perdita ... sto letteralmente copia/incolla il codice di esempio della documentazione per la versione esatta di Python che sto usando e non funziona come dovrebbe. Posso solo presumere che mi manchi qualcosa in quanto anch'io non trovo davvero nessuno con un problema simile.

risposta

12

Il ConfigParser constructor ha un argomento di parola chiave allow_no_value con un valore predefinito di False.

Provare a true, e sto scommettendo che funzionerà per voi.

+0

Eccellente, Grazie Karl. Forse dovrei inviare loro una nota che suggerisce di cambiare il loro esempio .ini per mettere un commento sopra quella sezione notando che la parte funziona solo se il costruttore è cambiato. Suppongo che avrei dovuto leggere l'intera documentazione, ma il modo in cui sono state definite le cose mi sembrava che avrebbe dovuto funzionare in questo modo di default. – Sparc

+0

funziona in questo anche se la sezione è simile al seguente: [Software] 3700 ufficiale Copy 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 

importazione ConfigParser

cf = ConfigParser.ConfigParser (allow_no_value = True)

Problemi correlati