Uitzonderingen afhandelen in Python

Uitzonderingen afhandelen in Python

Afhandeling van uitzonderingen is uw mogelijkheid om foutmeldingen aan te passen en weer te geven voor delen van uw programma die niet werken.





Of je nu een website bouwt, een API, een module of een ander product maakt met Python, je vermogen om effectief om te gaan met uitzonderingen stelt je in staat expliciet de oorzaak van een fout aan te geven.





Hier bekijken we hoe u met uitzonderingen in Python om kunt gaan.





Hoe het afhandelen van uitzonderingen werkt in Python

Wanneer je uitzonderingen maakt, vertel je Python een bericht te tonen wanneer een codeblok mislukt. Het afhandelen van uitzonderingen is als iemand vertellen dat hij moet proberen een gewicht op te tillen. En als ze dat niet kunnen, moeten ze je dat laten weten.

Om echter een uitzondering in Python op te werpen, vertel je Python om te proberen een bepaald codeblok uit te voeren. Als dat blok faalt, kun je Python vragen om een ​​gedefinieerde uitzondering op de mislukte code te maken.



Wanneer moet u uitzonderingen gebruiken in Python-programmering?

In de meeste gevallen kunt u standaard Python-fouten maskeren met uitzonderingen. Maar je moet waakzaam blijven, omdat dit foutopsporingsproblemen kan veroorzaken. Daarom kan het moeilijk zijn om de hoofdoorzaak van een eventuele bug te achterhalen.

Daarom moet u uitzonderingen gebruiken wanneer u uw code voldoende hebt getest en u zeker weet dat deze werkt. Uiteindelijk is het de beste gewoonte om ze te gebruiken om mogelijke fouten af ​​te handelen die kunnen ontstaan ​​aan de kant van de gebruiker in plaats van aan de code zelf.





Met andere woorden, u kunt uitzonderingen gebruiken als waarschuwingstool om gebruikers te begeleiden bij het gebruik van uw programma.

Python-uitzonderingen afhandelen

Om uitzonderingen in Python af te handelen, moet je eerst je code in een probeer...behalve blok. Af en toe moet u misschien een Tenslotte verklaring om verdere acties af te handelen, afhankelijk van uw behoeften.





Het coderingsconcept van Python-uitzonderingen ziet er over het algemeen als volgt uit:

try:
'code to be executed'
except:
'error message'

Zoals eerder vermeld, kunt u ook gebruik maken van Tenslotte in een uitzonderingsblok. Maar de code die je erin schrijft a Tenslotte clausule is onafhankelijk en wordt uitgevoerd, ongeacht of er een uitzondering is of niet.

In wezen is het handig als je een ander codeblok hebt dat je continu wilt uitvoeren, ongeacht wat er gebeurt binnen de probeer...behalve blok.

Hier is een voorbeeld:

try:
print(9+6)
except:
print('error message')
finally:
print('please restart')
Output:
15
please restart

In de bovenstaande code, alsjeblieft begin opnieuw loopt continu, ongeacht of er een uitzondering is of niet.

Een anders conditie kan ook volgen behalve uitspraak:

try:
C = 2 + B
except:
print('B needs to be defined')
else:
print(u'Added successfully! The result is %s'%(C))
Output: B needs to be defined

Probeer dat nu opnieuw met 'B' gedefinieerd:

try:
B = 5
C = 2 + B
except:
print('B needs to be defined')
else:
print(u'Added successfully! The result is %s'%(C))
Output: Added successfully! The result is 7

Bovenstaande voorbeelden zijn niet-gestandaardiseerde uitzonderingen. Maar u kunt een meer expliciete uitzondering hebben wanneer u ingebouwde (gedefinieerde) uitzonderingen combineert met niet-gestandaardiseerde:

try:
C = 2 + B
except NameError as err:
print(err, ':', 'B needs to be defined, please')
else:
print(u'Added successfully! The result is %s'%(C))
Output: name 'B' is not defined : B needs to be defined, please

De bovenstaande uitzondering controleert eerst of er een Naamfout in de proberen blok. Het drukt vervolgens de standaard af Naamfout uitzondering eerst (' naam 'B' is niet gedefinieerd'). En ondersteunt het met uw schriftelijke uitzondering ('B moet worden gedefinieerd, alstublieft').

Gerelateerd: Basis programmeerprincipes die elke programmeur moet kennen

beste apps voor het maken van muziek voor iphone

En als u een reeks uitzonderingen wilt afhandelen, kunt u ook een proberen blok met velen behalve verklaringen. Dit is best handig als je proberen blok heeft het potentieel om veel uitzonderingen te hebben:

try:
B = 5
C = 2 + B
D = float(6)
F = 7/0
except NameError as err:
print(err,':', 'B needs to be defined, please')
except ValueError as val:
print(val,':', 'You can't convert that data')
except ZeroDivisionError as zeroerr:
print(zeroerr,':', 'You can't divide a number by zero')
else:
print(u'Operation successfull! The results are: %s, %s, and %s'%(C, D, F))
Output: division by zero : You can't divide a number by zero

Wat als de verdeling geldig is? Bijvoorbeeld, het vervangen van F = 7/0 in de bovenstaande code met F = 7/5 geeft:

Output: Operation successfull! The results are: 7, 6.0, and 1.4

Door de gebruiker gedefinieerde uitzonderingen in Python

U kunt ook uw uitzondering bedenken en deze later in uw programma bellen. Hiermee kunt u een specifieke beschrijving van uw uitzondering geven en deze een naam geven zoals u wilt.

Niettemin komt elke door de gebruiker gedefinieerde uitzondering (direct of indirect) nog steeds van de ingebouwde Uitzondering klasse van Python.

De onderstaande voorbeeldcode verwijst naar de basis Uitzondering rechtstreeks door te bellen RuntimeError daaruit:

class connectionError(RuntimeError):
def __init__(self, value):
self.value = value
try:
raise connectionError('Bad hostname')
except connectionError as err:
print(err.value)
Output: Bad hostname

Let daar op verbindingsfout , in dit geval, is een door de gebruiker gedefinieerde klasse, die u kunt verhogen wanneer u deze in uw programma nodig hebt.

Verwant: De beginnershandleiding voor reguliere expressies met Python

U kunt een door de gebruiker gedefinieerde uitzondering maken door deze rechtstreeks af te leiden van de Uitzondering basis klasse. De onderstaande uitzondering verhindert echter het aftrekken van 5 van 6 en roept de uitzondering rechtstreeks van de basisklasse op:

class errors(Exception):
pass
class sixFiveError(errors):
def __init__(self, value, message):
self.value = value
self.message = message
try:
raise sixFiveError(6-5,'This substraction is not allowed')
except sixFiveError as e:
print('There was an error:', e.message)
Output: There was an error: This substraction is not allowed

In de praktijk kunt u een eerder gedefinieerde uitzondering gebruiken door deze in een andere functie aan te roepen. U kunt bijvoorbeeld een floatError dat alleen de toevoeging van twee drijvers toestaat:

# First call the base exception classes:
class errors(Exception):
pass
# Next, derive your own exception from the base class:
class FloatError(errors):
def __init__(self, value, message):
self.value = value
self.message = message
# Create a function to add two floats:
def addTwoFloat(a, b):
if (type(a) and type(b)) != float:
raise FloatError(a+b,'Numbers must be float to add')
else:
print(a + b)
addTwoFloat(4, 7)
Output: __main__.FloatError: (11, 'Numbers must be float to add')

Omdat je nu een . hebt gedefinieerd FloatError class, Python verhoogt het als je probeert om twee niet-float letterlijke waarden toe te voegen met behulp van de addtwoFloat functie.

U kunt de . afdrukken FloatError class in hetzelfde Python-bestand waarin je het hebt gemaakt om te zien wat er gebeurt:

print(FloatError)
Output:

FloatError , is echter geen ingebouwde Python-uitzondering. U kunt dit verifiëren door te bellen met FloatError in een ander vers Python-bestand waarin je deze klasse niet hebt gemaakt:

print(FloatError)
Output: NameError: name 'FloatError' is not defined

je krijgt een Naamfout omdat Python het niet als een standaarduitzondering herkent.

U kunt ook andere foutklassen zelf definiëren om te zien hoe ze zich voordoen.

Maak uw Python-programma's gebruiksvriendelijker met uitzonderingen

Er zijn veel standaarduitzonderingen in Python. Maar u kunt de uwe ook definiëren. Desalniettemin hangt het gebruiksgemak van uw programma tot op zekere hoogte af van hoe het omgaat met verschillende uitzonderingen (door de gebruiker gedefinieerd, niet-specifiek of standaard).

Met uitzonderingen kunt u echter dicteren hoe uw programma moet werken wanneer gebruikers ermee omgaan. Het duidelijk en beknopt vermelden van de oorzaak van een fout geeft gebruikers ook een seintje over wat ze verkeerd doen, en soms wijst het hen in de goede richting.

Deel Deel Tweeten E-mail Hoe u uw Python-code kunt debuggen

Rust jezelf uit met de knowhow om elke Python-bug op je pad te pletten.

Lees volgende
Gerelateerde onderwerpen
  • Programmeren
  • Python
  • Codeerhandleidingen
Over de auteur Idisou Omisola(94 artikelen gepubliceerd)

Idowu is gepassioneerd door alles wat slimme technologie en productiviteit betreft. In zijn vrije tijd speelt hij met coderen en schakelt hij over naar het schaakbord als hij zich verveelt, maar hij vindt het ook heerlijk om af en toe uit de routine te stappen. Zijn passie om mensen de weg te wijzen in moderne technologie motiveert hem om meer te schrijven.

Meer van Idowu Omisola

Abonneer op onze nieuwsbrief

Word lid van onze nieuwsbrief voor technische tips, recensies, gratis e-boeken en exclusieve deals!

Klik hier om je te abonneren