» »

[Python] Enumerate in ponoven poizkus po napaki

[Python] Enumerate in ponoven poizkus po napaki

bluefish ::

V zanki bi rad ulovil napako ter ponovil iteracijo v kateri se je napaka zgodila.

Trenutno imam nekaj v stilu:
for i, item in enumerate(items):
        try:
            # nekaj_1
            # nekaj_2
        except Exception:
            print('Napaka.')
            continue

Nato recimo testiram z:
for i, item in enumerate(items):
        try:
            # nekaj_1
            if i == 2:
                raise Exception
            # nekaj_2
        except Exception:
            print('Napaka.')
            continue

Zanka se po napaki nadaljuje, vendar seveda ne ponovi iteracije, pri kateri je prišlo do napake. V primeru torej pri i = 2.

Kak predlog?

kuall ::

Identično vprašanje sem jaz postavil za C# in Visual Studio in dobil odgovor, tam se take stvari da ujeti z nekim hit counterjem. Za Python pa dvomim, C# in Visual Studio sta napredna, dvomim, da je Pynthon tudi tako.
Saj bi dal link do stackoverflow samo potem bom svojo identitteto razkril, kar pa ne bi rad naredil.

OrkAA ::

Dodaj se eno neskoncno zanko znotraj vsake iteracije. V stilu:

for i, item in enumerate(items):
    while True:
        try:
            # nekaj_1
            # nekaj_2
        except Exception:
            print('Napaka.')
            continue
        break


Je pa to zelo naiven sistem. Bos moral razmislit kako preprecit neskoncni loop, ce se dolocene operacije enostavno ne bo dalo opravit. Recimo namesto neskoncne zanke imet for loop s parimi ponovitvami ali pa kaj pametnejsega.

Raptor F16 ::

Kolikor poznam funkcijo enumerate, ti bo iz nekega seznama naredila tole:
seznam = ['kocka', 'krog', 'trikotnik']


for i, item in enumerate(seznam,1):
        try:
            
            if i == 2:
                raise Exception
                print('wololo')
                
            print (i,'trololo')
            
        except Exception:
            print(i, 'Napaka.')
            continue
#Output, ki ga dobim je sledeč:
#1 trololo
#2 Napaka.
#3 trololo



Je to to, kar si hotel ? Da ti ob dvojki vrže napako ?

Pač if stavek sem dal pred vse drugo. Najprej naj bi postavil pogoje, sicer ti meče takole:
#1 trololo
#2 trololo
#2 Napaka.
#3 trololo
Leva ... Leva ... leva desna ena dva

Zgodovina sprememb…

kuall ::

orkaa ga je razumel kaj hoče, jaz ga pa nisem. samo čudno mi je, da tako vprašanje postavlja, ker je odgovor čist tak enostaven, ki ga moraš sam razgruntat, samo malo je za razmislit.

On bi rad, da če je napaka v vrstici se tista vrstica 2x (ali dokler ni več napake) poganja. če ni napake pa samo 1x.

inner loop seveda rabiš, kaj pa drugega.

SloKin ::

https://stackoverflow.com/a/16551393

Funkcija, ki jo pozenes za vsak elemnt in vrne true ali false glede na exception... Ponavljas dokler set ni prazen ali po kaksni drugi hevristiki...

Spura ::

Ne razumem zakaj toliko kompliciranja.

for i, item in enumerate(items):
        retry = true
        while retry
            try:
                # nekaj_1
                # nekaj_2
                retry = false
            except Exception:
                print('Napaka.')


Lahko pa namesto boolean spremenljivke uporabis counter, ali pa imas kak bolj kompleksen pogoj kdaj retry na false nastavit, da ti pac ne bo slo v neskoncne loope.

OrkAA ::

Kje je pa kompliciranje? Jaz sem mu dal identicen odgovor kot ti.

SloKin ::

Spura je izjavil:

Ne razumem zakaj toliko kompliciranja.


for i, item in enumerate(items):
retry = true
while retry
try:
# nekaj_1
# nekaj_2
retry = false
except Exception:
print('Napaka.')


Lahko pa namesto boolean spremenljivke uporabis counter, ali pa imas kak bolj kompleksen pogoj kdaj retry na false nastavit, da ti pac ne bo slo v neskoncne loope.

Evo, da ti zakompliciram se malo... A ves, da je tole precej drugacen algoritem?
Analogija: zbiras podpise v bloku. Tvoj algoritem gre od vrat do vrat in trka dokler mu vrat ne odprejo. Njegov algoritem gre do prvih vrat in potrka. Ce mu ne odprejo gre naprej. Ko pride do konca, gre cez tiste, ki mu niso odprli.

Bi rekel, da je to kompliciranje? Po mojem ne. Prej bi rekel osnove programiranja...


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[Python3] Izvajanje ukazov po določenem času

Oddelek: Programiranje
211524 (1134) noraguta
»

Programiranje v pythonu

Oddelek: Programiranje
142163 (1521) Sony-Tech
»

Pomoč pri izdelavi Python skripte (strani: 1 2 )

Oddelek: Programiranje
616092 (4738) BigWhale
»

[Python] Pomoč pri računanju Pi-ja

Oddelek: Programiranje
202610 (2242) Spura
»

tabele v pythonu...

Oddelek: Programiranje
81186 (967) noraguta

Več podobnih tem