slogan3

Help me bij het implementeren van efficiënte foutafhandeling in mijn code met Cursor

description

Door deze prompt te gebruiken, kan ik effectieve foutafhandelingstechnieken leren die de betrouwbaarheid van de code verbeteren, de gebruikerservaring versterken en het debuggen vereenvoudigen.

prompt

try_prompt

Ik wil mijn foutafhandelingsstrategieën in mijn project verbeteren. Mijn programmeertaal is {{programmeertaal}}. Geef me alsjeblieft best practices en vo ... more
generate_helper
disclaimerOnPageApi image_legal_disclaimer...

ai_answers

provider: openai
model: gpt-4.1-nano
Natuurlijk! Hier zijn best practices en voorbeelden voor het verbeteren van je foutafhandelingsstrategieën in Python: 1. Gebruik specifieke except-blokken Gebruik niet zomaar een algemene except, maar specificeer de uitzonderingen die je verwacht. Dit maakt het makkelijker om problemen te identificeren en te behandelen. 2. Log fouten effectief Gebruik de ingebouwde logging-module om fouten vast te leggen. Dit helpt bij het debuggen en bij het monitoren van je applicatie. 3. Geef gebruiksvriendelijke foutmeldingen Vermijd het tonen van technische details aan de gebruiker. Geef in plaats daarvan duidelijke en nuttige meldingen. 4. Gebruik try-except-finally voor resource management Gebruik finally om resources zoals bestanden of netwerkverbindingen altijd op te schonen. Voorbeeld: ```python import logging # Configuratie van de logger logging.basicConfig(level=logging.ERROR, format='%(asctime)s - %(levelname)s - %(message)s', filename='fouten.log') def deel_bewerking(waarde): try: # Voorbeeld van een mogelijke fout resultaat = 10 / waarde return resultaat except ZeroDivisionError as e: # Log de fout logging.error(f"Deling door nul: {e}") # Geef een gebruiksvriendelijke boodschap print("Sorry, je kunt niet delen door nul.") except TypeError as e: logging.error(f"Typefout: {e}") print("Ongeldige invoer. Zorg dat je een nummer invoert.") except Exception as e: # Algemene foutafhandeling voor onverwachte fouten logging.exception("Onverwachte fout opgetreden") print("Er is een onverwachte fout opgetreden. Probeer het opnieuw.") # Voorbeeld gebruik deel_bewerking(0) deel_bewerking('test') ``` 5. Gebruik custom exceptions voor complexe situaties Voor meer controle kun je eigen exception-classes maken. ```python class ValidatieFout(Exception): pass def valideer_invoer(invoer): if not isinstance(invoer, int): raise ValidatieFout("Invoer moet een integer zijn.") try: valideer_invoer('abc') except ValidatieFout as e: print(f"Validatiefout: {e}") ``` 6. Gebruik context managers voor resourcebeheer Voor het openen van bestanden of netwerkverbindingen, gebruik with-blokken zodat resources altijd correct worden afgesloten. ```python try: with open('gegevens.txt', 'r') as bestand: data = bestand.read() except FileNotFoundError: logging.error("Bestand niet gevonden.") print("Het gevraagde bestand is niet gevonden.") ``` Door bovenstaande technieken toe te passen, wordt je foutafhandeling robuuster, beter gedocumenteerd en gebruiksvriendelijker.
provider: deepseek
model: deepseek-chat
Zeker! Hier zijn essentiële best practices en voorbeelden voor robuuste foutafhandeling in Python: ## 1. Basis Try-Except Blokken ```python try: result = 10 / int(input("Voer een getal in: ")) print(f"Resultaat: {result}") except ZeroDivisionError: print("Fout: Kan niet door nul delen!") except ValueError: print("Fout: Ongeldige invoer. Voer een geldig getal in.") except Exception as e: print(f"Onverwachte fout: {e}") ``` ## 2. Specifieke vs. Algemene Fouten ```python def lees_bestand(bestandsnaam): try: with open(bestandsnaam, 'r') as bestand: inhoud = bestand.read() return inhoud except FileNotFoundError: return f"Bestand '{bestandsnaam}' niet gevonden." except PermissionError: return "Geen toegang tot dit bestand." except IOError as e: return f"I/O fout: {e}" except Exception as e: return f"Onverwachte fout: {e}" ``` ## 3. Else en Finally Clauses ```python def veilige_deling(a, b): try: resultaat = a / b except ZeroDivisionError: print("Fout: Deling door nul!") return None except TypeError: print("Fout: Ongeldige typen voor deling!") return None else: print("Bewerking succesvol uitgevoerd!") return resultaat finally: print("Deze code wordt altijd uitgevoerd (opruimen)") ``` ## 4. Fouten Loggen met logging module ```python import logging import datetime # Logging configureren logging.basicConfig( filename='app_errors.log', level=logging.ERROR, format='%(asctime)s - %(levelname)s - %(message)s' ) def proces_gebruikers_data(gebruikers_id, data): try: if not data: raise ValueError("Data mag niet leeg zijn") # Simuleer verwerking if gebruikers_id < 1: raise ValueError("Ongeldige gebruikers ID") return f"Data verwerkt voor gebruiker {gebruikers_id}" except ValueError as e: logging.error(f"Validatiefout voor gebruiker {gebruikers_id}: {e}") return f"Validatiefout: {e}" except Exception as e: logging.critical(f"Kritieke fout bij verwerken gebruiker {gebruikers_id}: {e}") return "Er is een onverwachte fout opgetreden" ``` ## 5. Custom Exceptions ```python class OngeldigeEmailError(Exception): """Aangepaste exceptie voor ongeldige emailadressen""" def __init__(self, email, bericht="Ongeldig email formaat"): self.email = email self.bericht = bericht super().__init__(self.bericht) def valideer_email(email): if "@" not in email or "." not in email.split("@")[-1]: raise OngeldigeEmailError(email) return True # Gebruik try: valideer_email("ongeldig-email") except OngeldigeEmailError as e: print(f"Email validatie mislukt: {e.bericht} - '{e.email}'") ``` ## 6. Context Managers voor Resource Management ```python from contextlib import contextmanager @contextmanager def database_verbinding(connection_string): verbinding = None try: verbinding = connect_to_database(connection_string) yield verbinding except DatabaseError as e: logging.error(f"Database fout: {e}") raise finally: if verbinding: verbinding.close() print("Database verbinding gesloten") # Gebruik try: with database_verbinding("mydb://localhost") as db: db.execute_query("SELECT * FROM gebruikers") except DatabaseError as e: print(f"Kon query niet uitvoeren: {e}") ``` ## 7. Gebruiksvriendelijke Foutmeldingen ```python class FoutHandler: @staticmethod def gebruikersvriendelijke_fout(fout_type, extra_info=None): fout_berichten = { 'bestand_niet_gevonden': "Het opgevraagde bestand kon niet worden gevonden.", 'netwerk_fout': "Er is een netwerkprobleem opgetreden. Controleer uw verbinding.", 'database_fout': "De database is tijdelijk niet beschikbaar. Probeer het later opnieuw.", 'toegang_gewweigerd': "U heeft geen toegang tot deze functionaliteit." } basis_bericht = fout_berichten.get(fout_type, "Er is een fout opgetreden.") if extra_info: return f"{basis_bericht} Details: {extra_info}" return basis_bericht # Voorbeeld gebruik try: # Code die fout kan geven pass except FileNotFoundError: print(FoutHandler.gebruikersvriendelijke_fout('bestand_niet_gevonden')) except ConnectionError: print(FoutHandler.gebruikersvriendelijke_fout('netwerk_fout')) ``` ## 8. Best Practices Samenvatting 1. **Wees specifiek**: Vang specifieke excepties in plaats van alleen `Exception` 2. **Log altijd**: Gebruik logging voor debugging en monitoring 3. **Geef context**: Voorzie duidelijke, gebruiksvriendelijke berichten 4. **Cleanup**: Gebruik `finally` voor resource cleanup 5. **Custom exceptions**: Maak aangepaste excepties voor domeinspecifieke fouten 6. **Don't ignore**: Vermijd lege except-blokken 7. **Documenteer**: Documenteer welke excepties functies kunnen opwerpen ```python def voorbeeld_best_practice(): """ Voorbeeld functie met robuuste foutafhandeling. Raises: ValueError: Als invoer ongeldig is IOError: Bij bestandsoperatie fouten """ try: # Je hoofdlogica hier pass except ValueError as e: logging.warning(f"Validatiefout: {e}") raise except IOError as e: logging.error(f"I/O fout: {e}") raise except Exception as e: logging.critical(f"Onverwachte fout: {e}") raise ``` Deze technieken helpen je om meer robuuste en onderhoudbare Python-code te schrijven!