Python kommer med inbyggda undantag som höjs när vanliga fel uppstår. Dessa fördefinierade undantag ger en fördel eftersom du kan använda try-except-blocket i Python för att hantera dem i förväg. Till exempel kan du använda try-except-blocket för att hantera ValueError-undantaget i Python. I den här artikeln kommer vi att se några metoder och orsaker till att uppstå och lösa Valueerror-undantagen i Python.
Vad är ValueError i Python?
ValueError-undantaget tas ofta upp i Pytonorm när ett ogiltigt värde tilldelas en variabel eller skickas till en funktion när den anropas. Det förekommer också ofta vid uppackning av sekvensdatatyper samt med funktioner när en retursats används.
Syntax :
ValueError: could not convert string to float: 'techcodeview.com'>
Varför uppstår ValueError i Python?
Några vanliga orsaker till att ValueError uppstår är följande:
- Ogiltigt argument
- Felaktig användning av Matematikmodul
- Packar upp en iterabelt objekt
Ogiltigt argument
Ett ValueError uppstår vanligtvis när vi skickar ett ogiltigt argument till en funktion i Python. Som ett exempel tar funktionen float() i Python ett tal och konverterar det till ett floatvärde. Men om vi skickar en sträng till den här funktionen kommer det naturligtvis inte att vara möjligt för Python att konvertera en sträng till en float och därmed kommer det att leda till ett ValueError.
Python3
lista som array
a>=> 34> b>=> 'techcodeview.com'> #works normally> print>(>float>(a))> #leads to the valueerror> print>(>float>(b))> |
>
>
Hangup (SIGHUP) Traceback (most recent call last): File 'Solution.py', line 8, in print(float(b)) ValueError: could not convert string to float: 'techcodeview.com'>
Felaktig användning av matematikmodulen
ValueError-undantaget höjs ganska mycket när man arbetar med Math-modulen i Python. Detta beror på att man kanske inte är medveten om de giltiga argumenten för en given funktion. Som ett exempel returnerar math.factorial()-funktionen i Math-modulen faktorn för ett givet tal. Men om någon försöker skicka ett negativt värde till den här funktionen är de skyldiga att stöta på ValueError:
Python3
konvertera objekt till sträng
import> math> print>(math.factorial(>->3>))> |
>
>
Hangup (SIGHUP) Traceback (most recent call last): File 'Solution.py', line 3, in print(math.factorial(-3)) ValueError: factorial() not defined for negative values>
Packar upp ett itererbart objekt
Ett itererbart objekt i Python, som listor, tupler och ordböcker, kan loopas över. Uppackning, där värden för en iterabel tilldelas individuella variabler, är en vanlig operation. Om du anger fler eller färre variabler kommer ett fel, som ValueError, att uppstå. Till exempel, i exemplet nedan packas en lista med tre artiklar upp med hjälp av fyra variabler, vilket leder till ett ValueError
Python3
java scanner
my_list>=> [>'Geeks'>,>'for'>,>'Geeks'>]> a, b, c, d>=> my_list> print>(a)> print>(b)> print>(c)> |
>
>
Hangup (SIGHUP) Traceback (most recent call last): File 'Solution.py', line 2, in a, b, c, d = my_list ValueError: not enough values to unpack (expected 4, got 3)>
Tillvägagångssätt/skäl för att lösa Valueerror-undantag
Nedan finns sätten att lösa Valueerror-undantagen i Python
- Använder försök-utom block
- Rätta till koden
- Använd korrekt antal variabler
Använder försök-utom block
Nedan försöker koden konvertera ett numeriskt värde (`a`) och en icke-numerisk sträng (`b`) till flytande med hjälp av `float()`-funktionen. Ett try-except-block används för att fånga ett potentiellt `ValueError` som kan uppstå under konverteringen av den icke-numeriska strängen. Om ett sådant fel inträffar skrivs ett tydligt felmeddelande ut som indikerar oförmågan att konvertera strängen till en flytande.
Python3
a>=> 34> b>=> 'techcodeview.com'> try>:> ># works normally> >print>(>float>(a))> ># may lead to ValueError, so use try-except> >print>(>float>(b))> except> ValueError:> >print>(>'Error: Unable to convert the string to a float.'>)> |
>
>
Utgång:
34.0 Error: Unable to convert the string to a float.>
Rätta till koden
Nedan beräknar kodfaktorn 3 utan att höja aValueError>. Om du behöver hantera fallet med negativ inmatning, kanske du vill lägga till en kontroll för att säkerställa att inmatningen är giltig innan du anroparmath.factorial>fungera.
Python3
import> math> print>(math.factorial(>3>))> |
java struktur
>
>
Utgång:
6>
Använd korrekt antal variabler
För att lösa listan Valueerror Exceptions in unpack, bör du använda rätt antal variabler för att packa upp listan. Om din lista har tre element bör du använda tre variabler. Här är den korrigerade koden:
Python3
lägga till strängar java
my_list>=> [>'Geeks'>,>'for'>,>'Geeks'>]> a, b, c>=> my_list># Use three variables instead of four> print>(a)> print>(b)> print>(c)> |
>
>
Produktion
Geeks for Geeks>
Slutsats
Sammanfattningsvis innebär att lösa ValueError-undantag i Python en noggrann granskning av indata och säkerställande av kompatibilitet med det förväntade formatet. Att använda korrekta valideringstekniker, såsom försök-utom-block och villkorliga uttalanden, kan hjälpa till att förebyggande fånga upp och hantera potentiella problem. Att använda inbyggda funktioner och bibliotek för indataanalys och validering ger ett extra lager av robusthet till koden.