Poikkeusten käsittely Pythonissa

Poikkeusten käsittely Pythonissa

Poikkeusten käsittely on kyky mukauttaa ja näyttää virheilmoituksia ohjelman osille, jotka eivät toimi.





Rakennatpa verkkosivustoa, teet sovellusliittymän, moduulin tai minkä tahansa muun tuotteen Pythonilla, kykysi tehokkaasti käsitellä poikkeuksia voit ilmoittaa virheen syyn.





Tässä tarkastelemme, miten voit käsitellä poikkeuksia Pythonissa.





Miten poikkeusten käsittely toimii Pythonissa

Kun nostat poikkeuksia, kehotat Pythonia tuomaan esiin viestin aina, kun koodilohko epäonnistuu. Poikkeusten käsittely on kuin kertoisi jollekin yrittää nostaa painoa. Ja jos he eivät voi, heidän tulee kertoa sinulle.

Poikkeuksen nostamiseksi Pythonissa kerrot kuitenkin Pythonille, että se yrittää suorittaa tietyn koodilohkon. Jos tämä lohko epäonnistuu, voit pyytää Pythonia nostamaan määritetyn poikkeuksen epäonnistuneeseen koodiin.



Milloin sinun pitäisi käyttää poikkeuksia Python -ohjelmoinnissa?

Useimmissa tapauksissa voit peittää tavalliset Python -virheet poikkeuksia käyttämällä. Mutta sinun on pysyttävä valppaana, koska tämä voi aiheuttaa virheenkorjausongelmia. Näin ollen saattaa olla vaikeaa selvittää mahdollisen virheen perimmäinen syy.

Siksi sinun on käytettävä poikkeuksia, kun olet testannut koodisi riittävästi ja olet varma, että se toimii. Loppujen lopuksi on parasta käyttää niitä niiden mahdollisten virheiden käsittelemiseen, jotka voivat johtua käyttäjän päästä eikä koodista.





Toisin sanoen, voit käyttää poikkeuksia varoitustyökaluna opastamaan käyttäjiä käyttämään ohjelmaa.

Python -poikkeusten käsittely

Poikkeusten käsittelemiseksi Pythonissa sinun on ensin käärittävä koodi a -kirjaimeen yritä ... paitsi lohko. Joskus sinun on ehkä sisällytettävä a vihdoin lausunto käsitelläksesi lisätoimia tarpeidesi mukaan.





Python -poikkeusten koodauskonsepti näyttää yleensä tältä:

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

Kuten aiemmin mainittiin, voit myös käyttää vihdoin poikkeuslohkossa. Mutta koodi, jonka kirjoitat a vihdoin lauseke on riippumaton ja toimii riippumatta siitä, onko poikkeus vai ei.

Pohjimmiltaan se on kätevä, jos sinulla on toinen koodilohko, jonka haluat suorittaa jatkuvasti riippumatta siitä, mitä tapahtuu yritä ... paitsi lohko.

Tässä on esimerkki:

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

Yllä olevassa koodissa käynnistä uudelleen toimii jatkuvasti riippumatta siitä, onko poikkeus vai ei.

An muu tila voi myös seurata paitsi lausunto:

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

Yritä nyt uudelleen määrittämällä 'B':

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

Yllä olevat esimerkit ovat poikkeuksellisia poikkeuksia. Mutta sinulla voi olla selkeämpi poikkeus, kun yhdistät sisäänrakennetut (määritellyt) poikkeukset standardeihin:

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

Yllä oleva poikkeus tarkistaa ensin, onko NimiVirhe kohdassa yrittää lohko. Sitten se tulostaa standardin NimiVirhe poikkeus ensin ('nimeä' B 'ei ole määritelty'). Ja tukee sitä kirjallisella poikkeuksellasi ('B on määriteltävä, kiitos').

Aiheeseen liittyviä: Ohjelmoinnin perusperiaatteet Jokaisen ohjelmoijan on tiedettävä

kuinka paljon dataa youtube käyttää tunnissa

Ja jos haluat käsitellä poikkeusketjua, voit myös liittää a yrittää lohko monien kanssa paitsi lausuntoja. Tämä on melko kätevä, jos yrittää lohkolla voi olla monia poikkeuksia:

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

Entä jos jako on pätevä? Esimerkiksi korvaaminen F = 7/0 yllä olevassa koodissa F = 7/5 antaa:

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

Käyttäjän määrittämät poikkeukset Pythonissa

Voit myös keksiä poikkeuksesi ja soittaa heille myöhemmin ohjelmassasi. Näin voit antaa tarkan kuvauksen poikkeuksestasi ja nimetä se haluamallasi tavalla.

Siitä huolimatta jokainen käyttäjän määrittämä poikkeus (suoraan tai epäsuorasti) tulee edelleen sisäänrakennetusta Poikkeus Python luokka.

Alla oleva esimerkkikoodi viittaa tukikohtaan Poikkeus suoraan soittamalla Suorituksenaikainen virhe siitä:

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

Ota huomioon, että yhteysvirhe , tässä tapauksessa on käyttäjän määrittämä luokka, jonka voit nostaa milloin tahansa, kun tarvitset sitä ohjelmassasi.

Aiheeseen liittyviä: Aloittelijan opas säännöllisiin lausekkeisiin Pythonilla

Voit tehdä käyttäjän määrittämän poikkeuksen johtamalla sen suoraan Poikkeus perusluokka. Alla oleva poikkeus estää kuitenkin 5: n vähentämisen 6: sta ja kutsuu poikkeuksen suoraan perusluokasta:

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

Käytännössä voit käyttää aiemmin määrittämääsi poikkeusta kutsumalla sitä toisessa toiminnossa. Voit esimerkiksi luoda floatError joka sallii vain kahden kellukkeen lisäämisen:

# 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')

Koska olet nyt määrittänyt a FloatError luokkaan, Python nostaa sen, jos yrität lisätä kaksi ei-kelluvaa literaalia käyttämällä addtwoFloat toiminto.

Voit tulostaa FloatError luokka samaan Python -tiedostoon, jossa olet luonut sen, nähdäksesi mitä tapahtuu:

print(FloatError)
Output:

FloatError ei kuitenkaan ole sisäänrakennettu Python-poikkeus. Voit tarkistaa tämän soittamalla FloatError toisessa tuoreessa Python -tiedostossa, jossa et ole luonut tätä luokkaa:

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

Saat a NimiVirhe koska Python ei tunnista sitä tavalliseksi poikkeukseksi.

Voit myös yrittää määritellä muita virheluokkia nähdäksesi, miten ne toimivat.

Tee Python-ohjelmistasi käyttäjäystävällisempiä poikkeuksia lukuun ottamatta

Pythonissa on monia tavallisia poikkeuksia. Mutta voit myös määritellä omasi. Siitä huolimatta ohjelman helppokäyttöisyys riippuu jossain määrin siitä, miten se käsittelee erilaisia ​​poikkeuksia (olivatpa ne käyttäjän määrittämiä, ei-spesifisiä tai vakioita).

Poikkeusten avulla voit kuitenkin määrätä, miten ohjelmasi toimii, kun käyttäjät ovat vuorovaikutuksessa heidän kanssaan. Virheen syyn selkeä ja ytimekäs ilmoittaminen antaa käyttäjille myös ajatuksen siitä, mitä he tekevät väärin, ja joskus se osoittaa heidät oikeaan suuntaan.

Jaa Jaa Tweet Sähköposti Kuinka korjata Python -koodisi

Varusta itsesi osaamisella, jolla voit purkaa jokaisen Python-vian tielläsi.

Lue seuraava
Liittyvät aiheet
  • Ohjelmointi
  • Python
  • Koodausoppaat
Kirjailijasta Idisou Omisola(94 artikkelia julkaistu)

Idowu on intohimoinen kaikkeen älykkääseen tekniikkaan ja tuottavuuteen. Vapaa -ajallaan hän leikkii koodauksella ja vaihtaa shakkilaudalle, kun on kyllästynyt, mutta hän myös rakastaa irtautumista rutiinista silloin tällöin. Hänen intohimonsa näyttää ihmisille tie modernin tekniikan ympärillä motivoi häntä kirjoittamaan enemmän.

Lisää Idowu Omisolasta

tilaa uutiskirjeemme

Liity uutiskirjeeseemme saadaksesi teknisiä vinkkejä, arvosteluja, ilmaisia ​​e -kirjoja ja ainutlaatuisia tarjouksia!

Klikkaa tästä tilataksesi