Se non state attenti, � facile definire delle opzioni in mutuo conflitto:
parser.add_option("-n", "--dry-run", ...)
...
parser.add_option("-n", "--noisy", ...)
(Questo � pi� facile che si verifichi se avete definita una vostra propria classe derivata di OptionParser con qualche opzione standard.)
Basandosi sull'assunto che ci� � usualmente un errore, optparse solleva in modo predefinito un'eccezione (OptionConflictError) quando questo si verifica. Dato che questo � un errore di programmazione facilmente correggibile, non dovreste tentare di catturare l'eccezione -- meglio correggere l'errore e tirare a campare.
A volte potreste volere che opzioni pi� recenti rimpiazzino deliberatamente le stringhe usate dalle opzioni pi� vecchie. Potete fare mediante la chiamata:
parser.set_conflict_handler("resolve")
che istruisce optparse a risolvere i conflitti tra opzioni in modo intelligente.
Ecco come funziona: ogni volta che aggiungete un'opzione, optparse verifica gli eventuali conflitti tra le opzioni gi� definite. Se ne trova qualcuno, chiama il meccanismo di gestione dei conflitti che viene specificato al costruttore di OptionParser:
parser = OptionParser(..., conflict_handler="resolve")
oppure tramite il metodo set_conflict_handler().
Il meccanismo predefinto di gestione dei conflitti � error.
Ecco un esempio: prima definite un insieme di OptionParser per risolvere intelligentemente i conflitti:
parser = OptionParser(conflict_handler="resolve")
Adesso aggiungete le opzioni:
parser.add_option("-n", "--dry-run", ..., help="opzione dry-run originale")
...
parser.add_option("-n", "--noisy", ..., help="sii loquace")
A questo punto optparse individua che l'opzione precedentemente
definita sta gi� usando la stringa di opzione -n. Dal
momento che conflict_handler == "resolve", la situazione viene
risolta con la rimozione dell'opzione -n dalla precedente
lista delle stringhe di opzioni. Ora, --dry-run � il
solo modo per l'utente di attivare quell'opzione. Se l'utente chieder�
aiuto, il relativo messaggio rifletter� questa situazione, cio�:
options: --dry-run opzione dry-run originale ... -n, --noisy sii loquace
Notate il fatto che � possibile ridurre via via le stringhe di opzione da una opzione gi� esistente, fino a che non ne sia rimasta nessuna, cos� che l'utente non abbia pi� modo di invocare l'opzione da riga di comando. In questo caso, optparse rimuove l'opzione completamente, e questa non verr� mostrata n� nel messaggio di aiuto n� altrove. Cio�, se continuiamo con il nostro OptionParser:
parser.add_option("--dry-run", ..., help="nuova opzione dry-run")
A questo punto, la prima opzione -n/--dry-run non � pi� accessibile, e quindi optparse la rimuove. Se l'utente chiede aiuto, otterr� qualcosa di simile:
options: ... -n, --noisy sii loquace --dry-run nuova opzione dry-run
Vedete Circa questo documento... per informazioni su modifiche e suggerimenti.