1 / 14

Python

Python. Napake in izjeme. Zgled. a = int(input("Kaj delimo: ")) b = int(input("S čim: ")) rez = a / b print(a, '/', b, '=', rez). >>> Kaj delimo: 3 S čim: 4 3 / 4 = 0.75 >>>. >>> Kaj delimo: 3 S čim: 0 Traceback (most recent call last):

taniel
Download Presentation

Python

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Python Napake in izjeme

  2. Zgled • a = int(input("Kaj delimo: ")) • b = int(input("S čim: ")) • rez = a / b • print(a, '/', b, '=', rez) >>> Kaj delimo: 3 S čim: 4 3 / 4 = 0.75 >>> >>> Kaj delimo: 3 S čim: 0 Traceback (most recentcall last): File "E:/PrJ/OOP/primerNap.py", line 3, in <module> rez = a / b ZeroDivisionError: intdivision or modulobyzero >>>

  3. Varovalna mreža • try ... except a = int(input("Kaj delimo: ")) b = int(input("S čim: ")) try : rez = a / b print(a, '/', b, '=', rez) except : print('NAPAKA: Deljenje z 0 ni možno') print('Nadaljevanje programa') >>> Kaj delimo: 3 S čim: 0 NAPAKA: Deljenje z 0 ni možno Nadaljevanje programa >>> >>> Kaj delimo: 3 S čim: 4 3 / 4 = 0.75 Nadaljevanje programa

  4. Try ... except • try : • Poskusi izvesti stavke znotraj tega bloka • Če je vse ok, nadaljuj za try/except • except: • Če pride do napake, nadaljuj tukaj • Običajno nadaljevanje

  5. Seveda gre tudi s stavkom if • Kaj pa >>> Kaj delimo: 2 S čim: 2abla Traceback (most recentcall last): File "E:/PrJ/OOP/primerNap.py", line 2, in <module> b = int(input("S čim: ")) ValueError: invalid literalforint() with base 10: '2abla' >>> • Napaka pri vnosu! Ni v varovalni mreži!

  6. Varovalna mreža II try : a = int(input("Kaj delimo: ")) b = int(input("S čim: ")) rez = a / b print(a, '/', b, '=', rez) except : print('NAPAKA: Deljenje z 0 ni možno') print('Nadaljevanje programa') >>> Kaj delimo: 3 S čim: 2a NAPAKA: Deljenje z 0 ni možno Nadaljevanje programa >>> >>> Kaj delimo: 3 S čim: 4 3 / 4 = 0.75 Nadaljevanje programa

  7. Varovalna mreža III try : a = int(input("Kaj delimo: ")) except : print('To ni število! Vzel bom kar 1') a = 1 ok = False while not ok : try : b = int(input("S čim: ")) ok = True except print('To ni število! Vnesi ponovno') # imamo tako a, kot b try : rez = a / b print(a, '/', b, '=', rez) except : print('NAPAKA: Deljenje z 0 ni možno') print('Nadaljevanje programa') >>> Kaj delimo: 3 S čim: a To ni število! Vnesi ponovno S čim: 0 NAPAKA: Deljenje z 0 ni možno Nadaljevanje programa >>> >>> Kaj delimo: q To ni število! Vzel bom kar 1 S čim: 12 1 / 12 = 0.0833333333333 Nadaljevanje programa >>>

  8. Kaj je še možno • Lahko lovimo le določene izjeme • Lahko predvidimo več varovalnih mrež • try: • ... • except Opis_napake1 : • Kaj ob napaki 1 • except Opis_napake2 : • Kaj ob napaki 2 • except Opis_napake3 : • Kaj ob napaki 3 • In še marsikaj

  9. Javljanje napak • Napake lahko javimo/sprožimo tudi mi • raiseException('Opis napake') • Npr.: • Želimo ustvariti zajca z negativno začetno težo • Zajcu nekdo poskusi nastaviti težo izven dovoljenih meja • Zajec se je preveč zredil • Nekdo želi -7. Fibonaccijevo število • Bolje, kot če le s print opozorimo na napako! • Možnost prestreči javljeno napako in ustrezno ukrepati

  10. Napaka ob "stvaritvi" def __init__(self, sp, teža, ser) : self.spol = sp if teža <= 0 : raise Exception('ne morem ustvariti zajca s težo ' + str(teža)) if teža > 10 : raise Exception(Zajec je pretežak: ' + str(teža)) # če smo tu, je teža med 0 in 10 self.masa = teža self.serijska = ser

  11. Zgled >>> rj = Zajec(True, 2, 'S1') >>> be = Zajec(True, -2, 'S1') Traceback (most recentcall last): File "<pyshell#2>", line 1, in <module> be = Zajec(True, -2, 'S1') File "E:\PrJ\OOP\Zajec.py", line 6, in __init__ raiseException('ne morem ustvariti zajca s težo ' + str(teža)) Exception: ne morem ustvariti zajca s težo -2 >>> čr = Zajec(True, 12, 'S1') Traceback (most recentcall last): File "<pyshell#3>", line 1, in <module> čr = Zajec(True, 12, 'S1') File "E:\PrJ\OOP\Zajec.py", line 8, in __init__ raiseException('Zajec je pretežak: ' + str(teža)) Exception: Zajec je pretežak: 12 >>>

  12. Seveda lahko lovimo tudi te izjeme try : čr = Zajec(False, 12, 'S2') except : print('Takega zajca ni, zato sem naredil samca s težo 1 in ser. št."NN"') čr = Zajec(True, 1, 'NN') Takega zajca ni, zato sem naredil samca s težo 1 in ser. št."NN" >>>

  13. vrniNto(self, n) def vrniNto(self, n) : if n < 0 : raise Exception(str(n)+ '.to Fib. Število ne obstaja!') if n <= 20 : return self._tabela[n] return self.vrniNto(n - 2) + self.vrniNto(n - 1)

  14. spremeniTežo defspremeniTezo(self, novaTeza) : # smislena nova teza je le med 0 in 10 kg if 0 < novaTeza <= 10 : self.masa = novaTeza else : raiseException('Tako težkega zajca ni')

More Related