Python_Essentials_19 - itnett/FTD02H-N GitHub Wiki

Her er neste side som dekker Avanserte Feilhåndteringsstrategier og Mer Kompleks Filbehandling, optimalisert for GitHub Wiki-format, med emoji, formatering og forklaring tilpasset en norsk målgruppe uten forkunnskaper.


🚨 Avanserte Feilhåndteringsstrategier i Python

Egendefinerte Unntak 🛠️

Som Python-utvikler kan du lage dine egne unntak for å forbedre klarhet og spesifisitet i programmet ditt. Dette er nyttig når du vil fange opp spesifikke tilstander i koden som ikke dekkes av standardunntak.

💡 Eksempel:

class MinEgenFeil(Exception):
    pass

def sjekk_gyldig_tall(tall):
    if tall < 0:
        raise MinEgenFeil("Tallet kan ikke være negativt!")
    else:
        print(f"{tall} er et gyldig tall.")

try:
    sjekk_gyldig_tall(-5)
except MinEgenFeil as e:
    print(e)

Her definerer vi vårt eget unntak, MinEgenFeil, og bruker det til å kaste en feil når et tall er negativt.

Bruke Flere Except Blokker 🧱

Du kan håndtere flere typer feil ved å bruke flere except-blokker. Dette er nyttig når du vil skille mellom ulike typer feil og gi spesifikke løsninger.

try:
    tall = int(input("Skriv inn et tall: "))
    resultat = 10 / tall
except ValueError:
    print("Du må skrive inn et gyldig tall!")
except ZeroDivisionError:
    print("Du kan ikke dele på null!")

Sende Feil Videre (Re-Raising Exceptions) 🔄

Noen ganger vil du fange et unntak, men også sende det videre for mer avansert behandling lenger opp i programmet.

try:
    raise ValueError("Dette er en feil")
except ValueError as e:
    print("Fanget en feil, men sender den videre.")
    raise  # Sender feilen videre til høyere nivåer

📂 Mer Kompleks Filbehandling i Python

Organisering av Filer 🗃️

En vanlig utfordring er å organisere filer i mapper basert på type (for eksempel bilder, dokumenter eller arkiver). Dette kan automatiseres ved å bruke Python.

💡 Eksempel:

import os
import shutil

mapper = {
    "Bilder": [".jpeg", ".jpg", ".png"],
    "Dokumenter": [".pdf", ".txt", ".docx"],
    "Arkiver": [".zip", ".tar", ".rar"]
}

desktop_path = os.path.expanduser("~/Desktop")

for mappe, filtyper in mapper.items():
    mappe_path = os.path.join(desktop_path, mappe)
    os.makedirs(mappe_path, exist_ok=True)

    for fil in os.listdir(desktop_path):
        if any(fil.endswith(ft) for ft in filtyper):
            shutil.move(os.path.join(desktop_path, fil), mappe_path)

Dette scriptet organiserer filer på skrivebordet ditt i mapper som "Bilder", "Dokumenter" og "Arkiver" basert på filtypen.

Håndtering av Store Filer 📑

For å håndtere store filer effektivt kan det være lurt å lese og skrive dem i biter (chunks), slik at minnet ikke overbelastes.

💡 Eksempel:

chunk_storrelse = 1024  # 1KB av gangen
with open("stor_fil.txt", "rb") as fil:
    while (chunk := fil.read(chunk_storrelse)):
        print(chunk)  # Håndterer hver bit av gangen

Dette lar deg lese store filer i små biter, noe som er spesielt nyttig for filer på flere gigabyte.

Slette, Flytte og Kopiere Filer 🗑️📤

I Python kan du også slette, flytte og kopiere filer med innebygde moduler som os og shutil.

  • Slette en fil:
import os
os.remove("fil_som_skal_slettes.txt")
  • Flytte en fil:
import shutil
shutil.move("kilde.txt", "ny_mappe/destinasjon.txt")
  • Kopiere en fil:
shutil.copy("kilde.txt", "kopi.txt")

Filattributter og Metadata 📋

Noen ganger trenger du mer informasjon om filene dine, som når de ble opprettet, eller når de sist ble endret.

💡 Eksempel på henting av filattributter:

import os
import time

fil = "eksempel.txt"
info = os.stat(fil)

print(f"Størrelse: {info.st_size} bytes")
print(f"Opprettet: {time.ctime(info.st_ctime)}")
print(f"Sist endret: {time.ctime(info.st_mtime)}")

🎯 Oppsummering

  • Du kan lage egendefinerte unntak for å forbedre klarhet i programmet ditt.
  • Re-raise exceptions sender feil videre til et høyere nivå for mer avansert behandling.
  • Når du jobber med filer, kan du bruke os og shutil til å organisere, flytte, og slette filer.
  • Store filer bør leses i biter for å unngå minneproblemer.
  • Du kan også hente filattributter som størrelse og tidspunkt for siste endring.

🔗 Tilbake til forrige side: Feilhåndtering og Filbehandling | Neste side: Python Avanserte Emner →


Fortsett å eksperimentere med Python og filhåndtering, og ikke nøl med å stille spørsmål eller gjøre feil – det er slik man lærer best! 💡🐍