2015-02-14 8 views
6

In una funzione, voglio assicurarmi che gli argomenti aeb abbiano la stessa lunghezza. Voglio sollevare un'eccezione per questo se non rispettato. So che ValueError è per un'eccezione in cui un argomento in sé non soddisfa alcuni criteri particolari. ValueError è un errore appropriato da sollevare in questo caso in cui i criteri sono tra argomenti? In caso contrario, qualsiasi eccezione Python standard più appropriata?ValueError è un'eccezione appropriata da sollevare se l'utente passa argomenti di lunghezze diverse, il che significa essere uguali?

def func(a, b): 
    if len(a) != len(b): 
     raise ValueError("list a and list b must have the same length") 
+0

si può semplicemente restituire dichiarando che gli elenchi devono essere della stessa lunghezza –

+3

Sì, direi che "ValoreErrore" è la scelta appropriata; la tua attuale implementazione va bene. – jonrsharpe

+0

E per coloro che sono tentati di suggerire di usare 'assert' /' AssertionError', vedi http://stackoverflow.com/questions/944592/best-practice-for-python-assert –

risposta

2

Come Gary sottolinea nei commenti, ValueError è la scelta appropriata.

Un altro contendente sarebbe IndexError, come suggerito da Wikiii122. Tuttavia, secondo la documentazione Python,

exception IndexError

alzate quando un indice sequenza è fuori portata. (Gli indici delle fette sono troncati silenziosamente per rientrare nell'intervallo consentito; se un indice non è un intero semplice, viene sollevata un'eccezione TypeError.)

questo è probabilmente quello che sarebbe stato sollevato in ogni caso se non hai la briga di sollevare eccezione, ma non è descrittivo quanto TypeError cui documention è il seguente:

exception ValueError

generato quando incorporato in funzione o funzione riceve un argomento che ha il tipo giusto ma valore inappropriato, e la situazione è no t descritto da un'eccezione più precisa come IndexError.

+0

Intendevi ValueError quando hai digitato TypeError? – rudolfbyker

Problemi correlati