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)

PowerPoint - Ghid pentru începători
PowerPoint – Ghid pentru începători

PowerPoint este un instrument excelent pentru prezentări de orice fel, fie în clasă, fie în cadrul unei conferințe. O prezentare PowerPoint este formată dintr-o serie de diapozitive care pot fi proiectate (afișate electronic) sau tipărite într-o varietate de formate de … Citeşte mai mult

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.
Ghidul Google SEO
Ghidul Google SEO

Ghidul de iniţiere Google privind optimizarea pentru motoarele de căutare, Versiunea 1.1, 13 noiembrie 2008 Acest document a fost lansat iniţial ca un efort pentru a ajuta echipele Google, însă este la fel de util şi pentru webmasterii începători în … Citeşte mai mult

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.
Ghid WordPress pentru dezvoltatori
Ghid WordPress pentru dezvoltatori

Resursa esențială care te va ghida pas cu pas în lumea complexă a platformei WordPress.

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

Lasă un răspuns

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