Home » Articole » Articole » Calculatoare » Programare » Python » Python: Confruntarea cu imperfectul… sau cum să gestionați erorile de închidere a fișierelor cu ”with”

Python: Confruntarea cu imperfectul… sau cum să gestionați erorile de închidere a fișierelor cu ”with”

postat în: Python 0

Folosim instrucțiunea „with” pentru a deschide și închide fișierele. [1][2]


with open("in_test.txt", "rt") as in_file:
    with open("out_test.txt", "wt") as out_file:
        text = in_file.read()
        data = parse(text)
        results = encode(data)
        out_file.write(results)
    print( "All done." )

Dacă se întâmplă vreun fel de eroare oriunde în acest cod (unul dintre fișiere este inaccesibil, funcția parse() se sufocă cu date corupte etc.), declarațiile „with” garantează că toate fișierele vor fi în cele din urmă închise corect. Închiderea unui fișier înseamnă doar că fișierul este „curățat” și „eliberat” de programul nostru, astfel încât să poată fi utilizat într-un alt program.

Găsirea erorilot cu try

Deci acum aveți programul perfect, rulează impecabil, cu excepția unui detaliu: se va bloca la intrarea nevalidă a utilizatorului. Nu vă temeți, deoarece Python are o structură de control specială pentru dvs. Se numește
try
și încearcă să facă ceva. Iată un exemplu de program cu o problemă:


print("Type Control C or -1 to exit")
number = 1
while number != -1:
   number = int(input("Enter a number: "))
   print("You entered:", number)

Observați cum când introduceți @#& iese ceva de genul:

Traceback (most recent call last):
 File "try_less.py", line 4, in <module>
   number = int(input("Enter a number: "))
ValueError: invalid literal for int() with base 10: '\\@#&'

După cum puteți vedea, funcția int() este nemulțumită de numărul @#& (așa cum ar și trebui să fie). Ultima linie arată care este problema; Python a găsit o ValueError. Cum poate programul nostru să facă față acestui lucru? Ceea ce facem este mai întâi: să punem locul unde pot apărea erori într-un bloc try și, în al doilea rând: să spunem lui Python cum vrem să fie tratată ValueErrors. Următorul program face acest lucru:


print("Type Control C or -1 to exit")
number = 1
while number != -1:
    try:
        number = int(input("Enter a number: "))
        print("You entered:", number)
    except ValueError:
        print("That was not a number.")

Acum, când rulăm noul program și îi dăm @#&, ne spune „Acesta nu a fost un număr”. și continuă cu ceea ce făcea înainte.

Când programul dvs. continuă să aibă o eroare pe care știți cum să o gestionați, puneți codul într-un bloc try și puneți modalitatea de a gestiona eroarea în blocul except.

Exerciții

Actualizați cel puțin programul de numere de telefon (în secțiunea Dicționare) pentru ca acesta să nu se blocheze dacă un utilizator nu introduce date în meniu.

Soluţie

def print_menu():
	print('1. Print Phone Numbers')
	print('2. Add a Phone Number')
	print('3. Remove a Phone Number')
	print('4. Lookup a Phone Number')
	print('5. Quit')
	print()

numbers = {}
menu_choice = 0
print_menu()
while menu_choice != 5:
	try:
		menu_choice = int(input("Type in a number (1-5): "))
		if menu_choice == 1:
			print("Telephone Numbers:")
			for x in numbers.keys():
				print("Name: ", x, "\tNumber:", numbers[x])
			print()
		elif menu_choice == 2:
			print("Add Name and Number")
			name = input("Name: ")
			phone = input("Number: ")
			numbers[name] = phone
		elif menu_choice == 3:
			print("Remove Name and Number")
			name = input("Name: ")
			if name in numbers:
				del numbers[name]
			else:
				print(name, "was not found")
		elif menu_choice == 4:
			print("Lookup Number")
			name = input("Name: ")
			if name in numbers:
				print("The number is", numbers[name])
			else:
				print(name, "was not found")
		elif menu_choice != 5:
			print_menu()
	except ValueError:
		print("That was not a number.")
[1] „The ‘with’ statement”

[2] ‘The Python „with” Statement by Example’

(Include texte din Wikibooks traduse și adaptate de Nicolae Sfetcu)

Statistica pentru afaceri
Statistica pentru afaceri

Instrumentul esențial pentru decizii inteligente în mediul de afaceri!

Nu a fost votat Interval de prețuri: 18.33 lei până la 39.28 lei Selectează opțiunile Acest produs are mai multe variații. Opțiunile pot fi alese în pagina produsului.
Întreţinerea şi repararea calculatoarelor
Întreţinerea şi repararea calculatoarelor

Vrei să înveți cum funcționează un calculator și cum îl poți repara sau întreține singur?

Nu a fost votat 0.00 lei Selectează opțiunile Acest produs are mai multe variații. Opțiunile pot fi alese în pagina produsului.


Descoperă mai multe la MultiMedia

Abonează-te ca să primești ultimele articole prin email.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *