Citat:
Ursprungligen postat av
Gottisborgen
Nej, menar, enligt python pep, att det är pythonstandard att istället catcha felen än att först kolla ifall det kommer att bli fel. Istället för att kolla ifall filen finns, filnamnet är korrekt, osv osv varje gång du ska öppna en fil, ska du catcha felet. Detta eftersom det är meningen att det som kommer som input är korrekt, och därför ska ta det som grund, istället för att checka femtioelva saker som i 99% av fallen kommer att vara korrekt.
Catcha 1 fel på 99 körningar, istället för att kolla 99 saker för att förhindra 1 fel.
Det där är lite relaterat till att ofta behöver man fånga felet
ändå. I alla fall om man tittar på saker som rör systemets tillstånd, snarare än bara på indatan i sig. I fallet med filer är det ju så att även om du kollat att filen finns, och har rätt typ, och du har läsrättigheter och allt sånt så kan ju det du precis kollat upp
upphöra att gälla vid det laget du kommer till att faktiskt öppna den. Filer är ju som bekant inte statiska, och de kan byta namn, försvinna, få andra rättigheter m.m. p.g.a. vad andra gör i systemet. Så i slutändan måste du
ändå ha en try/except runt ditt
open-anrop.
När det gäller saker som inte borde kunna ändra tillstånd medan din funktion kör (som t.ex. en inkommande lista - eller i alla fall en inkommande tuple) är det rimligare att göra lite kollar. Men om koden formuleras så här...
Kod:
if not lst:
return None, None
min = max = lst[0]
...
...eller så här...
Kod:
try:
min = max = lst[0]
except IndexError:
return None, None
...
...känns inte som om det spelar så stor roll.