DavidErikMollberg/kennsluromur huggingface dataset:
Ég gæti sagt hér skilum bara beint til baka segðinni num plus einn af því að num plus einn er eitthvert gildi
Og skilum því bara beint til baka án þess að setja inn búa til einhverja milliniðurstöðu og og hérna skila henni
Þannig að ef ég keyri þetta og ég slæ inn hérna níu þá fæ ég tíu
Þannig sjáið þetta virkar líka og er reyndar mjög algeng leið að skila bara beint til baka einhverri niðurstöðu sérstaklega ef sú niðurstaða er tiltölulega einföld eins og hún er í þessu tilviki
Já góðan daginn komið þið sæl aftur
Það sem ég ætla að gera núna ég ætla að halda aðeins áfram þar sem frá var horfið í síðasta myndbandi þar sem við vorum að tala um textaskrár og tengja það við það sem að heitir exception handling á ensku eða meðhöndlun frábrigða
Exception er frábrigði
Og hvað í ósköpunum er það
Ja það vill svo til að í keyrslu forrita geta komið upp ýmis konar villur og við þurfum einhvern veginn að geta brugðist við þessum villum þannig að við viljum kannski ekki að forrit sé að koma með einhverjar undarlegar villumeldingar til notandans eða forritið hætti óvænt keyrslu vegna þess að það fær ekki inntak á einhverju tilteknu tagi inn eins og búist var við
Þannig að það er ýmislegt sem getur komið upp við keyrslu forrits og við þurfum að geta brugðist við því og í Python og reyndar öðrum forritunarmálum er hægt að nota ákveðin forritunar strúktúr sem heitir sem sagt exception handling
Það tekur inn ekkert out object hérna
Við höfum ekki áhuga á því við erum ekki að við erum ekki að skrifa hér neitt út í þetta file object
Eitt sem ég reyndar tek eftir núna sem ég raunverulega gleymdi í síðasta myndbandi var það og það er góð venja það er að loka skránni þannig að hér hefði verið eðlilegast að segja file object punktur close að loka skránni hérna í lokin
Af því að ég opnaði hana hérna með þessu open file falli
Og þá var eðlilegt að loka henni líka þegar ég er búin að nota hana hér inn í read file
Eigum við ekki bara sjá hvort þetta keyri örugglega eftir þessa breytingu
Það hét hérna data punktur t x t
Jú keyrir hérna hérna fæ ég first line second line third line og fourth line og bara til upprifjunar þetta voru gögnin mín úr skránni first line second line third line og fourth line og hérna voru eitthvað speis á milli sem strippuðum einmitt út með því að nota stripp fallið hér
Nú gerum ráð fyrir því að við ætlum að bjóða núna notandanum upp á það að skrifa út tiltekna línu í skránni
Þannig að það er ekki bara þannig að notandinn eigi að slá inn eða gefa okkur upp skrá af nafni heldur einhver eitthvað línu númer og við skulum bara eiga fall hérna alltaf gott að eiga fall fyrir sérhvern hlut
Ég ætla bara að taka þetta í burtu hérna mappa frá því síðast
Og eigum þá eitthvað fall hérna sem heitir bara get line number
Og number
þetta er eitthvað sem notandinn mun slá inn þannig að við getum sagt hér input enter a line number
að sem við fáum til baka er strengur er það ekki
Þannig að við getum sagt hér og við viljum að þetta sé integer
Þannig að algenga leiðin hjá okkur er að bara breyta þessu hreinlega þessum streng í integer og fáum þá einhverja tölu hér til baka sem ég kalla bara line num svona
Og skilum því bara hérna til baka
Þannig að þegar hann er búinn að biðja notandan um skráarnafnið þá ætla ég líka biðja hann um línunúmerið og þá get ég sagt line num er sama sem niðurstaðan af því að kalla fallið get line number svona
Í augnablikinu ætla ég ekkert að nota það
Ég ætla bara að sjá
Við getum bara svona til að sjá hvot þetta virkar eigum við ekki að prenta bara út line number hér
Sjáum hvort þetta virkar yfir höfuð hjá okkur
Keyri þetta hérna enter file name það er data text
Enter a line number tíu
Og hvað gerðist
Það prentaðist út sjáið það prentaðist út tíu hérna áður en að línurnar úr skránni prentast út
Og ég get meira að segja vegna þess að ég er aðeins að einblína á þessa virkni varðandi line number í augnablikinu þá ætla ég bara að UNK þetta hérna út
Þannig að ég ætla ekkert að opna skrána og lesa hana
Þannig að núna ef við gerum þetta aftur enter file name slæ ég það vissulega inn og svo einhverja línu hérna tíu og þá kemur bara einmitt tíu prentast út
Hérna segir hún hérna að ég sé ekkert að nota þetta file name
Þetta er unused variable vegna þess að ég UNK þessa virkni og ég get svo sem líka UNK þessa skrá hér þessa setningu líka
Nú hvað gerist ef ég keyri þetta núna aftur
Takið eftir því að ég get líka farið hérna niður í terminal og ýtt á ör upp gert það þannig
Ég slæ inn núna eitthvað sem er ekki tala A B bara sjáum hvað gerist þá
Þá fæ ég value error frá Python túlkinum sem segir invalid literal for int with space tíu
Sem sagt það kemur villa í þessari línu þegar verið er að lesa line number vegna þess að ég sló ekki inn tölu heldur streng strenginn A B og strenginn og strengnum A B hérna er ekki hægt að sem sagt það kemur strengurinn A B úr þessu input kalli
Þeim streng er ekki hægt að breyta í integer
Þetta er svona dæmigerð villa sem getur komið upp í keyrslu forrits
Það er segja forritarinn gerir ráð fyrir því að notandinn slá inn gögn á einhverju ákveðnu sniði en notandinn slær inn eitthvað óvænt eins og gerðist í þessu tilviki
Hvernig getum við brugðist við þessu
Jú við getum notað það sem heitir try except
Það sem ég ætla að reyna að gera er hér inni inndregið
Ef að eitthvað kemur upp
Það er að segja það kemur upp exception þá get ég notað except lykilorðið og þá þarf ég að tilgreina nafnið á exception inu sem ég er að grípa eins og það heitir to catch an exception og ég sé það einmitt hér að hún heitir value error þessi exception
Þannig að ég get sagt hér value error except value error
Það er segja ef að þessi tiltekna exception kemur upp þegar ég reyni að breyta streng í integer þá mun flæði forritsins flæða hingað í except hlutann og þá get ég brugðist við þessari villu á einhvern tiltekinn máta og segjum bara í þessu tilviki þá ætli ég að skila bara núlli
Eigum við ekki bara að skila núlli þá
Hvað gerist núna Ef ég slæ inn tíu
Þá kemur tíu vissulega ef ég slæ inn A B þá kemur núll núna og takið eftir því að það kemur að engin villa eins og kom áðan þar sem ég fékk villuna value error invalid literal for int with space tíu
Ástæðan er sú að ég er búinn að segja ég er að nota try except klausu
Í try hlutanum þá er inndregið það sem ég ætla að reyna að gera
Ég er að reyna að breyta streng yfir í integer
Ef það tekst þá skilast viðkomandi integer til baka
Ef að það kemur upp um villa við þessa umbreytingu þá hættir keyrslan í try blokkinni það er segja þetta return verður ekki framkvæmt vegna þess að kemur villa upp í þessari línu fyrir ofan og flæði forritsins fer niður í except hlutann og þar skila ég núlli til baka ef þetta kemur upp
Og hver er þá tilgangurinn hjá mér með þessu
Tilgangurinn er sá að forritið hætti ekki bara keyrslu með villu heldur bregst ég við villunni og læt forritið halda áfram keyrslu
Þannig að nú fæ ég þá núll inn og gæti þá haldið áfram með það sem ég var raunverulega að gera sem var það að mig langaði til að prenta út tiltekna línu úr skránni
Þannig að ef við höldum UNK þetta sem ég var búinn að kommentera hér áður þá ætla ég að núna þegar ég les nú þarf ég að prenta þessa línu lengur
Þegar ég les þessa skrá þá ætla ég að senda inn line number
Vegna þess að í þessu falli read file þá ætla ég bara að prenta út þess tilteknu línu
Hvað þarf ég þá að gera til að breyta þessu
Read file tekur þá line number hérna og við þurfum að eiga einhver counter hérna eigum við ekki að segja bara counter er sama sem einn og þá vil ég ekki prenta þessa línu í hverri einustu UNK
Ég vil eingöngu prenta þegar að counter inn minn er orðinn jafn þessu línunúmeri sem ég hef áhuga á þannig að ef að ég sem þannig að ef að ég sem notandi slæ inn fimm þá á ég að prenta út fimmtu línuna
Þannig að get ég einfaldlega leyst það er það ekki með bara hérna if setningu sem segir ef að line number sem að notandinn sló inn og ég sendi inn í þetta fall
Ef hann er sama sem counter inn þá prenta ég út línuna og hvað hætti þá bara break a úr þessari UNK
Vegna þess að þá veit ég að ég er búinn að finna línuna og þarf ekkert að UNK lengur
Já hérna vantar mig tvípunkt þegar ég prenta út línuna og brake a
Annars held ég bara áfram þangað til að vonandi þetta línunúmer finnst
File name er data punktur T X T
Ég ætla að prenta út línu númer tvö sjáið þið
Hvernig var data það var svona
First line second third og fourth
Keyri ég aftur ég ætla að prenta út línu þrjú
Úps þar gerði ég vitleysu
Ég gleymdi að slá inn þarna nafnið á skránni þá ætti að vera data puntkur T X T
Þrjú third line
Hvað gerist ef ég geri einhverja tóma vitleysu og slæ inn A B C D
Nei fyrirgefiði fyrst er það data puntkur T X T það er nafnið á skránni
Svo er það line number A B C D
Það gerist bara ekki neitt
Já er það ekki eiginlega akkúrat það sem ég vildi
Ég sló þarna inn einhverja tóma vitleysu
Það þýðir það að get line fallið
Það kemur að value error hér
flæði forritsins fer í except klausuna sem skilar núlli
Núll kemur út í line number
Ég sendi line number inn í read file fallið og þar er line núll og þannig að line number er núll segi ég
A B C D er ekki neitt línunúmer þannig ég fæ enga línu til baka
Þannig að þetta er bara eðlileg virkni
Þannig að þetta er svona lítið dæmi um virk um villu meðhöndlun með því að nota rábrigði og virknin eins og ég sagði er þannig að maður setur inn í try block þær setningar sem maður vill reyna to try
Ef að kemur upp exception í try blokkinni þá færist flæði forritsins yfir í except hlutann og ef að maður grípur viðkomandi exception sem er í þessu tilviki value error
Þá framkvæmist kóðinn sem að er undir þeirri except klausu
Þannig að maður þarf raunverulega að passa sig á því að grípa réttu exception inuna
Flæði forritsins fór hingað og skilaði núlli vegna þess að ég greip value error sem kom upp þegar ég reyni að breyta streng í integer og strengurinn inniheldur ekki tölustafi