Python Vadovėlis/Siekiant tobulumo
...arba, kaip kovoti su klaidomis
Klaidų „gaudymas“ su try
Tarkime, kad jau turi tobulą programą, ji vykdoma nepriekaištingai. Tik viena maža detalė: programa užstringa naudotojui įvedus klaidingą įvestį. Nesijaudink, Pithon'as turi specialią valdymo struktūrą, kuri tau padės. Ji vadinama try
ir ji bando kažką padaryti. Programos su problema pavyzdys:
print("Norėdamas uždaryti programą, įvesk -1")
skaicius = 1
while skaicius != -1:
skaicius = int(input("Įvesk skaičių: "))
print("Tu įvedei:", skaicius)
Jei įvesi @#&
, programa išves kažką tokio:
Traceback (most recent call last): File "bandyk.py", line 4, in <module> skaicius = int(input("Įvesk skaičių: ")) ValueError: invalid literal for int() with base 10: '\\@#&'
Kaip gali pastebėti, int()
funkcijai netinka įvestis @#&
(kaip ir turėtų būti). Paskutinė eilutė parodo, kokia yra problema: Python'as rado ValueError
klaidą. Kaip mūsų programa gali su tuo susitvarkyti? Visų pirma, tą kodo vietą, kurioje gali būti klaidų, turime įrašyti į try
bloką. Antra, turime pasakyti Python'ui, kaip tvarkytis su ValueError
klaidomis. Tai daro žemiau esanti programa:
print("Norėdamas uždaryti programą, įvesk -1")
skaicius = 1
while skaicius != -1:
try:
skaicius = int(input("Įvesk skaičių: "))
print("Tu įvedei:", skaicius)
except ValueError:
print("Tai buvo ne skaičius.")
Dabar, kai vykdome programą ir įvedame @#&
, programa mums pasako, kad Tai buvo ne skaičius.
ir toliau vykdo tai, ką turėtų.
Kai tavo programa vis susiduria su ta pačia klaida, kodą apsupk try
bloku ir aprašyk būdą, kaip elgtis sutikus klaidą, except
.
Pratimai
Pataisyk telefono numerių programą (Žodynai skyriuje), kad ji neužstrigtų, jei naudotojas neįrašo jokios įvesties į meniu.
Sprendimas | |
---|---|
def spausdink_meniu():
print('1. Spausdink telefonų numerius')
print('2. Pridėk telefono numerį')
print('3. Pašalink telefono numerį')
print('4. Ieškok telefono numerio')
print('5. Išeik')
print()
numeriai = {}
meniu_pasirinkimas = 0
spausdink_meniu ()
while meniu_pasirinkimas != 5:
try:
meniu_pasirinkimas = int(input("Įvesk skaičių (1-5): "))
if meniu_pasirinkimas == 1:
print("Telefono numeriai: ")
for x in numeriai.keys():
print("Vardas: ", x, "\tTelefono numeris:", numeriai[x])
print()
elif meniu_pasirinkimas == 2:
print("Pridėk vardą ir telefono numerį")
vardas = input("Vardas: ")
numeris = input("Telefono numeris: ")
numeriai[vardas] = numeris
elif meniu_pasirinkimas == 3:
print("Pašalink vardą ir telefono numerį")
vardas = input("Vardas: ")
if vardas in numeriai:
del numeriai[vardas]
else:
print(vardas, " nebuvo rastas")
elif meniu_pasirinkimas == 4:
print("Ieškok telefono numerio")
vardas = input("Vardas: ")
if vardas in numeriai:
print("Telefono numeris yra ", numeriai[vardas])
else:
print(vardas, " nebuvo rastas")
elif meniu_pasirinkimas != 5:
print_menu()
except ValueError:
print("Tai buvo ne skaičius.")
|