+ All Categories
Home > Documents > -BOLYAI Facultatea de Matematică şi Informatică...

-BOLYAI Facultatea de Matematică şi Informatică...

Date post: 20-Jan-2020
Category:
Upload: others
View: 8 times
Download: 1 times
Share this document with a friend
24
ALGORITMI ȘI PROGRAMRE Laura Dioşan Tratarea excepțiilor & fișierelor UNIVERSITATEA BABEŞ-BOLYAI Facultatea de Matematică şi Informatică
Transcript

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ă

Recapitulare

Excepții

Fișiere

Octo

mbri

e,

2018

A&P

21

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


Recommended