ALGORITMI ȘI
PROGRAMRE
Laura Dioşan
Tratarea excepțiilor & fișierelor
UNIVERSITATEA BABEŞ-BOLYAI
Facultatea de Matematică şi Informatică
Programare modulară
Conținut curs Programming in the large
Introducere în procesul de dezvoltare software
Programare procedurală
Programare modulară
Tipuri definite de utilizator
Principii de dezvoltare a softului
Testarea și inspectarea programelor
Programming in the small Recursivitate
Complexitatea algoritmilor
Algoritmi de căutare
Algoritmi de sortare
Metode de rezolvare a problemelor
Recapitulare
Octo
mbri
e,
2018
A&P
2
Programare modulară
Conținut
Excepții
Concept
Mecanism
Fișiere
Concept și tipologie
Prelucrarea datelor de intrare și ieșire
Octo
mbri
e,
2018
A&P
3
Programare modulară
Excepții De ce?
”unhandled exception has occured in your application...”
Concept
Evenimente care întrerup execuția normală a unei aplicații
Sunt prezente și folosite în multe limbaje de programare
Sunt aruncate atunci când, în timpul execuției unei aplicații, sunt detectate situații speciale
Pot întrerupe execuția normală a unui bloc de cod
Codul dezvoltat de un programator trebuie Să arunce (creeze) aceste excepții
Să trateze aceste excepții
Prezența unei excepții nu înseamnă neapărat că în cod există erori logice
Octo
mbri
e,
2018
A&P
4
d = 0 print (5 / d) x = d * 10 Traceback (most recent call last): File "...\app.py", line 12, in <module> print(5 / d) ZeroDivisionError: division by zero
Programare modulară
Excepții Mecanism
Identificarea și aruncarea lor de către Instrucțiunea raise
interpretorul Python codul Python pentru a indica situații speciale
Prinderea sau tratarea unei excepții instrucțiunea try...except clauza finally – pt instrucțiuni care se execută în toate cazurile
Propagarea excepțiilor
Octo
mbri
e,
2018
A&P
5
try: # main code except ExceptionType1 as e1: #if e1 appears, this code is executed except ExceptionType2 as e2: #if e2 appears, this code is executed else: #if there is no exception, this code is executed
def functionThatRaiseAnException(a, b): if (cond): raise ValueError(“message") # code
Programare modulară
Excepții
Exemplu 1
Octo
mbri
e,
2018
A&P
6
try: d = 0 print (5 / d) x = d * 10 except ZeroDivisionError: print("division by zero error...") finally: print("all cases...") ---------------- division by zero error... all cases...
Programare modulară
Excepții
Exemplu 2
Octo
mbri
e,
2018
A&P
7
x = int(input("first no = ")) y = int(input("second no = ")) try: div = gcd_v2(x,y) print("gcd of ", x, " and ", y, " is ", div) except ValueError as ex: print("exceptinal case: ", ex) finally: print("do you want to try again?")
def gcd_v2(a, b): if (a == 0): if (b == 0): raise ValueError("one number must be != 0") else: return b # a == 0, b != 0 else: if (b == 0): # a != 0, b == 0 return a else: # a != 0, b != 0 while (a != b): if (a > b): a = a - b else: b = b - a return a # a == b
def test_gcd_v2(): assert gcd_v2(0, 2) == 2 assert gcd_v2(2, 0) == 2 assert gcd_v2(3, 2) == 1 assert gcd_v2(6, 2) == 2 assert gcd_v2(4, 6) == 2 assert gcd_v2(24, 9) == 3 try: gcd_v2(0, 0) assert False except ValueError: assert True try: gcd_v2(0, -2) assert False except ValueError: assert True try: gcd_v2(-2, 2) assert False except ValueError: assert True
Programare modulară
Excepții Tratarea excepțiilor
Crearea excepțiilor raise
Orice tip de excpeție poate fi însoțită de un anumit mesaj
Prinderea excepțiilor -- Bloc de instrucțiuni cuprins între try –
except
Excepțiile se prind pe baza tipului lor IOError ValueError Excepții definite de utilizator (urmează)
Un bloc try - excpet poate trata una, mai multe sau toate
tipurile de excepții
Poate avea loc: În cadrul funcției care a creat și aruncat excepția În cadrul unei funcții care apelează funcția care a creat excepția Interpretorul Python – în acest caz, programul ”crapă”
Octo
mbri
e,
2018
A&P
8
Programare modulară
Excepții
Când se recomandă folosirea excepțiilor
Semnalarea unor situații speciale
Ex1. Funcția nu primește parametrii conform specificației
Ex2. Prelucrarea unor date din fișiere inexistente/inaccesibile
Ex3. operații imposibile (division by 0)
Forțarea respectării specificației (pre-condiții)
Octo
mbri
e,
2018
A&P
9
Programare modulară
Fișiere
Concept și tipologie
Prelucrarea datelor de intrare și ieșire
Octo
mbri
e,
2018
A&P
10
Programare modulară
Fișiere
Concept și tiplogie
Procesarea fişierelor la 2 nivele:
Nivel inferior
Acces direct la SO
Nivel superior
Utilizarea unor funcţii speciale de intrare-ieşire
Tipuri de fișiere
Fișiere text
Fișiere binare
Octo
mbri
e,
2018
A&P
11
Programare modulară
Fișiere Prelucrarea datelor de intrare și ieșire
De la consolă / pe ecran
s = input(mesaj) print(s)
Din / în fișiere
Operații posibile Deschiderea unui fișier Închiderea unui fișier Citirea din fișier Scrierea în fișier
Probleme care pot să apară
Nume și căi de acces greșite Fișiere inexistente sau inaccesibile Fișiere deja deschise
Octo
mbri
e,
2018
A&P
12
Programare modulară
Fișiere
Prelucrarea datelor de intrare și ieșire – Din/în fișiere de tip text - Operații posibile
Deschiderea unui fișier
fileObject = open(fileName [, accessMode][, buffering])
fileName – [caleAcces +] numele fișierului
accessMode ϵ {r, rb, r+, rb+, w, wb, w+, wb+, a, ab, a+, ab,
ab+}
atribute ale fileObject: name, closed, mode, softspace
Octo
mbri
e,
2018
A&P
13
def processFile1(): try: f = open("dat.txt", "r") #some operations on the file except IOError as e1: print("something is wrong as IO..." + str(e1)) except ValueError as e2: print("something is wrong as value..." + str(e2)) ------------------------------ something is wrong as IO...[Errno 2] No such file or directory: 'dat.txt'
def processFile1(): try: f = open("data.txt", "r") #some operations on the file except IOError as e1: print("something is wrong as IO..." + str(e1)) except ValueError as e2: print("something is wrong as value..." + str(e2))
Programare modulară
Fișiere
Prelucrarea datelor de intrare și ieșire – Din/în fișiere de tip text - Operații posibile
Închiderea unui fișier
fileObject.close()
Octo
mbri
e,
2018
A&P
14
def processFile1(): try: f = open("data.txt", "r") #some operations f.close() except IOError as e1: print("something is wrong as IO..." + str(e1)) except ValueError as e2: print("something is wrong as value..." + str(e2))
Programare modulară
Fișiere
Prelucrarea datelor de intrare și ieșire – Din/în fișiere de tip text - Operații posibile
Citirea din fișier
str = fileObject.read([count]);
line = fileObject.readline()
Octo
mbri
e,
2018
A&P
15
def processFile1(): try: f = open("data.txt", "r") #read line by line; we know there are 3 lines!!! line1 = f.readline() print(line1) line2 = f.readline() print(line2) line3 = f.readline() print(line3) except IOError as e1: print("something is wrong as IO..." + str(e1)) except ValueError as e2: print("something is wrong as value..." + str(e2))
Programare modulară
Fișiere Prelucrarea datelor de intrare și ieșire – Din/în fișiere de tip text -
Operații posibile
- Citirea din fișier
Octo
mbri
e,
2018
A&P
16
def processFile2(): try: f = open("data.txt", "r") allLines = f.read() #read all the lines for char in allLines: #consider each char from lines print(char) lines = allLines.split("\n") for line in lines: #consider each line from the file print(line) for line in lines: #consider each line from the file words = line.split(" ") for w in words: print(w) lastLine = lines[2] words = lastLine.split(" ") s = 0 for w in words: s = s + int(w) print("sum = ", s) f.close() except IOError as e1: print("something is wrong as IO..." + str(e1)) except ValueError as e2: print("something is wrong as value..." + str(e2))
Programare modulară
Fișiere
Prelucrarea datelor de intrare și ieșire – Din/în fișiere de tip text - Operații posibile
Scrierea în fișier
fileObject.write(str);
Octo
mbri
e,
2018
A&P
17
def processFile3(): try: f = open("results.txt", "w") f.write("message1" + "\n") f.write("message2\n") f.write(str(123) + "\n") f.write(str(156) + "\n") l1 = [1,2,3] f.write(str(l1) + "\n") l2 = ["ab", "abc", "abcd"] f.write(str(l2) + "\n") f.close() except IOError as e1: print("something is wrong as IO..." + str(e1)) except ValueError as e2: print("something is wrong as value..." + str(e2))
Programare modulară
Fișiere
Serializare
Concept
reprezentarea unei entitati sub forma unei secvente de octeti, cu ascunderea diverselor detalii,din care să poată fi refăcută ulterior entitatea originală
În Python
Serializare în fișiere binare
Marshal
Pickle
Serializare în fișiere text
Json
Octo
mbri
e,
2018
A&P
18
Programare modulară
Fișiere
Serializare în fișiere binare
Octo
mbri
e,
2018
A&P
19
#import marshal as pk import pickle as pk def processFile4(): data = [1, 2, 3] try: f = open("res.pk", "wb") pk.dump(data, f) f.close() except IOError as e1: print("something is wrong as IO..." + str(e1)) except ValueError as e2: print("something is wrong as value..." + str(e2)) def processFile5(): try: f = open("res.pk", "rb") data = pk.load(f) print(data) f.close() except IOError as e1: print("something is wrong as IO..." + str(e1)) except ValueError as e2: print("something is wrong as value..." + str(e2))
Programare modulară
Fișiere
Serializare în fișiere text
Octo
mbri
e,
2018
A&P
20
import json as js def processFile6(): data = {"jack": 4098, "sape": 4139} try: f = open("res.json", "w") js.dump(data, f) f.close() except IOError as e1: print("something is wrong as IO..." + str(e1)) except ValueError as e2: print("something is wrong as value..." + str(e2)) def processFile7(): try: f = open("res.json", "r") data = js.load(f) print(data) f.close() except IOError as e1: print("something is wrong as IO..." + str(e1)) except ValueError as e2: print("something is wrong as value..." + str(e2))
Programare modulară
Cursul următor Programming in the large
Introducere în procesul de dezvoltare software
Programare procedurală
Programare modulară
Tipuri definite de utilizator
Principii de dezvoltare a softului
Testarea și inspectarea programelor
Programming in the small Recursivitate
Complexitatea algoritmilor
Algoritmi de căutare
Algoritmi de sortare
Metode de rezolvare a problemelor
Recapitulare
Octo
mbri
e,
2018
A&P
22
Programare modulară
Materiale de citit şi legături utile
1. Limbajul Python http://docs.python.org/3/reference/index.html
2. Biblioteca standard Python http://docs.python.org/3/library/index.html
3. Tutorial Python http://docs.python.org/3/tutorial/index.html
4. Frentiu, M., H.F. Pop, Fundamentals of Programming, Cluj University Press, 2006, 220 pagini
5. Kent Beck.Test Driven Development: By Example. Addison-Wesley Longman, 2002 http://en.wikipedia.org/wiki/Test-driven_development
6. Martin Fowler. Refactoring. Improving the Design of Existing Code. Addison-Wesley, 1999 http://refactoring.com/catalog/index.html
Octo
mbri
e,
2018
A&P
23
Programare modulară
Informaţiile prezentate au fost colectate din diferite surse de pe internet, precum şi din cursurile de Fundamentele Programării ţinute în anii anteriori de către:
Lect. Dr. Adriana Guran – www.cs.ubbcluj.ro/~adriana
Lect. Dr. Istvan Czibula - www.cs.ubbcluj.ro/~istvanc
Lect. Dr. Andreea Vescan -www.cs.ubbcluj.ro/~avescan
Lect. Dr. Ioan Lazăr -www.cs.ubbcluj.ro/~ilazar
Lect. Dr. Molnar Arthur – www.cs.ubbcluj.ro/~arthur
Octo
mbri
e,
2018
24
A&P