<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
    <channel>
        
        <title>
            <![CDATA[ Monica Jin - freeCodeCamp.org ]]>
        </title>
        <description>
            <![CDATA[ Impara a programmare gratuitamente! Tutorial di programmazione su Python, JavaScript, Linux e molto altro. ]]>
        </description>
        <link>https://www.freecodecamp.org/italian/news/</link>
        <image>
            <url>https://cdn.freecodecamp.org/universal/favicons/favicon.png</url>
            <title>
                <![CDATA[ Monica Jin - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/italian/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Sat, 16 May 2026 19:16:15 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/italian/news/author/monica/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ Le migliori pratiche HTML - Come costruire un sito web basato sull'HTML migliore ]]>
                </title>
                <description>
                    <![CDATA[ L'HTML costituisce le fondamenta di qualsiasi sito web. È la prima cosa che le persone vedono. Senza di esso, non ci sarebbe alcun sito web. Per questo motivo, è importante attenersi alle buone pratiche di scrittura di codice. Se non segui le migliori pratiche, creerai un'esperienza utente negativa per chi ]]>
                </description>
                <link>https://www.freecodecamp.org/italian/news/le-migliori-pratiche-html-come-costruire-un-sito-web-basato-sullhtml-migliore/</link>
                <guid isPermaLink="false">67004e2e0a4dbd1c170ebf55</guid>
                
                    <category>
                        <![CDATA[ HTML ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Monica Jin ]]>
                </dc:creator>
                <pubDate>Sat, 02 Nov 2024 10:08:38 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/italian/news/content/images/2024/11/HTML-Best-Practices---How-to-Build-a-Better-HTML-Based-Website--1-.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Articolo originale:</strong> <a href="https://www.freecodecamp.org/news/html-best-practices/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">HTML Best Practices – How to Build a Better HTML-Based Website</a>
      </p><p>L'HTML costituisce le fondamenta di qualsiasi sito web. È la prima cosa che le persone vedono. Senza di esso, non ci sarebbe alcun sito web.</p><p>Per questo motivo, è importante attenersi alle buone pratiche di scrittura di codice. Se non segui le migliori pratiche, creerai un'esperienza utente negativa per chi naviga sul web.</p><p>C'è sempre qualcosa di nuovo da imparare in HTML, che tu sia un novellino a programmare o un professionista con tanta esperienza alle spalle.</p><p>In questo articolo, parleremo delle migliori pratiche di base in HTML.</p><p>Iniziamo. 💃</p><h2 id="le-migliori-pratiche-html"><strong>Le migliori pratiche HTML</strong></h2><p>Le <strong>migliori pratiche HTML</strong> sono regole che ti aiuteranno a creare siti web facili da mantenere e leggere.</p><p>Qui illustriamo alcune linee guida da tenere a mente quando si costruisce un sito web basato sull'HTML:</p><h2 id="usa-un-solo-elemento-h1-per-pagina"><strong>Usa un solo </strong>elemento <code>h1</code> per pagina</h2><p>Ci sono 6 diversi tag di intestazione in HTML, da <code>&lt;h1&gt;</code> a <code>&lt;h6&gt;</code>. Il tag <code>&lt;h1&gt;</code> è l'intestazione principale (il soggetto della pagina web), mentre il tag <code>&lt;h6&gt;</code> è l'intestazione meno importante.</p><p>Il tag <code>&lt;h1&gt;</code> è più grande del tag <code>&lt;h2&gt;</code> , il tag <code>&lt;h2&gt;</code> è più grande del tag <code>&lt;h3&gt;</code>, e così via fino al tag <code>&lt;h6&gt;</code>. Ciascuna di queste intestazioni diminuisce di dimensione in base alla sua importanza.</p><p>È importante evitare di usare più di un elemento <code>&lt;h1&gt;</code> per pagina.</p><p>Non fare questo ⬇️:</p><pre><code>&lt;main&gt;
&lt;div&gt;
&lt;h1&gt;Programmare può essere divertente?&lt;/h1&gt;
&lt;p&gt;Più scrivi codice, più migliori.&lt;/p&gt;
&lt;/div&gt;

&lt;div&gt;
&lt;h1&gt;Programmare è divertente&lt;/h1&gt;
&lt;p&gt;È sempre meglio quando ci si diverte a scrivere codice&lt;/p&gt;
&lt;/div&gt;
&lt;/main&gt;
</code></pre><p>Nell'esempio precedente, abbiamo usato il tag <code>&lt;h1&gt;</code> nel primo e secondo <code>&lt;div&gt;</code>. Programmare in questo modo funzionerà, ma sebbene tu raggiunga lo stesso obiettivo, questa non è una buona pratica.</p><p>Fai così invece ⬇️:</p><pre><code>&lt;main&gt;

&lt;div&gt;
&lt;h1&gt;Programmare può essere divertente?&lt;/h1&gt;
&lt;p&gt;Più scrivi codice, più migliori&lt;/p&gt;
&lt;/div&gt;

&lt;div&gt;
&lt;h2&gt;Programmare è divertente&lt;/h2&gt;
&lt;p&gt;È sempre meglio quando ti diverti a scrivere codice&lt;/p&gt;
&lt;/div&gt;

&lt;/main&gt;
</code></pre><p>Avere un solo elemento <code>&lt;h1&gt;</code> in una pagina web è fondamentale per l'ottimizzazione dei motori di ricerca (Search Engine Optimization, SEO). Aiuta i motori di ricerca a capire di cosa tratta una pagina web (l'idea principale di una pagina).</p><h3 id="non-saltare-i-livelli-di-intestazione-in-html"><strong>Non saltare i livelli di intestazione in HTML</strong></h3><p>Quando si usano i tag di intestazione, è fondamentale procedere da <code>&lt;h1&gt;</code> a <code>&lt;h2&gt;</code>, <code>&lt;h3&gt;</code>, <code>&lt;h4&gt;</code> e così via...</p><p>Non usare <code>&lt;h1&gt;</code> e saltare poi subito a <code>&lt;h3&gt;</code> quando usi i tag di intestazione. È difficile per i visitatori del web usare uno screen reader per capire il contenuto della tua pagina web quando salti i livelli di intestazione.</p><p>Uno screen reader è una tecnologia che aiuta le persone con difficoltà visive ad accedere a contenuti digitali come siti web o applicazioni ed interagire con essi tramite audio o touch. Gli utenti principali degli screen reader sono persone non vedenti o con una vista molto limitata.</p><p>Non fare questo ⬇️:</p><pre><code>&lt;h1&gt;Programmare è divertente&lt;/h1&gt;
&lt;h3&gt;È sempre meglio quando ci si diverte a scrivere codice&lt;/h3&gt;
&lt;h5&gt;La consistenza è chiave&lt;/h5&gt;
</code></pre><p>Fai così invece⬇️:</p><pre><code>&lt;h1&gt;Programmare può essere divertente?&lt;/h1&gt;
&lt;h2&gt;Più scrivi codice, più migliori&lt;/h2&gt;
&lt;h3&gt;Programmare è divertente&lt;/h3&gt;
</code></pre><h3 id="usa-l-elemento-figure-per-aggiungere-didascalie-alle-tue-immagini-in-html"><strong>Usa l'elemento <code>figure</code> per aggiungere didascalie alle tue immagini in HTML</strong></h3><p>È consigliabile usare l'elemento <code>&lt;figure&gt;</code> quando si aggiungono didascalie alle immagini. È importante usare l'elemento <code>&lt;figcaption&gt;</code> insieme all'elemento <code>&lt;figure&gt;</code> affinché funzioni.</p><p>Non fare questo ⬇️:</p><pre><code>&lt;div&gt;
&lt;img src=“a-man-coding.jpg” alt=“Un uomo che lavora al computer”&gt;
&lt;p&gt;Questa è una foto di un uomo che lavora al computer&lt;/p&gt;
&lt;/div&gt;
</code></pre><p>L'esempio precedente funzionerà come previsto, ma non è il modo migliore per farlo. In una situazione in cui l'immagine non si carica, verranno visualizzati sullo schermo il testo alternativo <code>alt</code> e il testo nell'elemento <code>&lt;p&gt;</code>. Sarà difficile per un visitatore usare uno screen reader per distinguere i testi del paragrafo e dell'<code>alt</code>.</p><p>Tieni sempre a mente che il fatto che il tuo codice funzioni, non vuol dire che stai seguendo le migliori pratiche.</p><p>Fai così invece ⬇️:</p><pre><code>&lt;figure&gt;
&lt;img src=“a-man-coding.jpg” alt=“Un uomo che lavora al computer”&gt;
&lt;figcaption&gt; Questa è una foto di un uomo che lavora al computer&lt;/figcaption&gt;
&lt;/figure&gt;
</code></pre><p>L'esempio precedente è il modo migliore per aggiungere didascalie alle tue immagini.</p><p>È importante aggiungere didascalie alle tue immagini in questo modo per:</p><ul><li>Ottimizzazione dei motori di ricerca: è più facile trovare le tue immagini sui motori di ricerca.</li><li>Sarà più semplice per i visitatori del sito che usano gli screen reader capire il contenuto della tua pagina web.</li></ul><h3 id="non-usare-div-per-creare-intestazioni-e-pi-di-pagina-usa-invece-gli-elementi-semantici"><strong>Non usare <code>div</code> per creare intestazioni e piè di pagina - usa invece gli elementi semantici</strong></h3><p>Gli elementi semantici HTML rendono la struttura di un documento più significativa su una pagina web. È buona pratica usare gli elementi semantici HTML per il corretto assemblaggio della tua pagina web.</p><p>Evita di usare <code>&lt;div&gt;</code> al posto degli elementi semantici HTML. Non usare gli elementi <code>&lt;div&gt;</code> per mostrare intestazioni o piè di pagina sulla tua pagina web. Al loro posto usa gli elementi semantici <code>&lt;header&gt;</code> e <code>&lt;footer&gt;</code>. </p><p>L'elemento <code>&lt;header&gt;</code> mostra la navigazione o la parte iniziale della pagina web.</p><p>L'elemento <code>&lt;footer&gt;</code> mostra le informazioni sul copyright o i link di navigazione della pagina web.</p><p>Non fare questo ⬇️:</p><pre><code>&lt;div class="header"&gt;
&lt;a href="index.html"&gt;Home&lt;/a&gt;
&lt;a href="#"&gt;About&lt;/a&gt;
&lt;a href="#"&gt;Contact&lt;/a&gt;
&lt;/div&gt;

&lt;div class="footer"&gt;
&lt;a href="index.html"&gt;Home&lt;/a&gt;
&lt;a href="#"&gt;About&lt;/a&gt;
&lt;a href="#"&gt;Contact&lt;/a&gt;
&lt;/div&gt;
</code></pre><p>Nell'esempio sopra, abbiamo usato il tag <code>&lt;div&gt;</code> come un contenitore per l'intestazione e il piè di pagina . Scriverlo così funzionerà, ma anche se raggiungi lo stesso obiettivo, questa non è questa una buona pratica.</p><p>Fai così invece ⬇️:</p><pre><code>&lt;header&gt;
&lt;h1&gt;&lt;/h1&gt;
&lt;/header&gt;

&lt;footer&gt;
&lt;a href="index.html"&gt;Home&lt;/a&gt;
&lt;a href="#"&gt;About&lt;/a&gt;
&lt;a href="#"&gt;Contact&lt;/a&gt;
&lt;/footer&gt;
</code></pre><p>L'esempio precedente è il modo migliore per aggiungere piè di pagina ed intestazioni alla tua pagina web.</p><p>È importante aggiungere piè di pagina e intestazioni usando gli elementi HTML semantici perché:</p><ul><li>Usare gli elementi semantici per l'intestazione (<code>header</code>) e il piè di pagina (<code>footer</code>) rende il tuo codice più leggibile.</li><li>Fornisce una migliore esperienza utente per i visitatori del sito. Sarà più facile per i visitatori che usano uno screen reader per capire il contenuto della tua pagina web.</li></ul><p>Dai un'occhiata a questo articolo per sapere di più sugli <a href="https://www.freecodecamp.org/news/html-best-practices/%3Chttps:/www.freecodecamp.org/news/semantic-html5-elements/#:~:text=Semantic%20HTML%20elements%20are%20those,content%20that%20is%20inside%20them%3E">elementi HTML semantici</a>.</p><h3 id="evita-di-usare-b-e-i-per-il-grassetto-o-il-corsivo-del-testo-di-una-pagina-web"><strong>Evita di usare <code>&lt;b&gt;</code> e <code>&lt;i&gt;</code> per il grassetto o il corsivo del testo di una pagina web</strong></h3><p>I tag <code>&lt;b&gt;</code> e <code>&lt;i&gt;</code> sono anche conosciuti come i tag per il grassetto e il corsivo. Sono entrambi usati per evidenziare le parole in un testo su una pagina web.</p><p>Non dovresti usare <code>&lt;b&gt;</code> e <code>&lt;i&gt;</code> per il grassetto e il corsivo perché non hanno un significato semantico. Usa la proprietà CSS <code>font-weight</code> o usa i tag <code>&lt;strong&gt;</code> e <code>&lt;em&gt;</code> invece.</p><p>Usi il tag <code>&lt;strong&gt;</code> per rendere importante un testo su una pagina web. Evidenzia o rende in grassetto un testo su una pagina web. Il tag <code>&lt;em&gt;</code> enfatizza il testo in una pagina web. Mostra anche il testo in corsivo come lo farebbe il tag <code>&lt;i&gt;</code>.</p><p>Non fare questo ⬇️:</p><pre><code>&lt;p&gt;&lt;i&gt;Programma al tuo ritmo&lt;/i&gt;&lt;p&gt;

&lt;p&gt;&lt;b&gt;programma al tuo ritmo&lt;/b&gt;&lt;p&gt;
</code></pre><p>I testi visualizzati saranno in grassetto e in corsivo nell'esempio sopra. Questo non avrà nessuna rilevanza per l'utente del web che usa uno screen reader. Non ha alcun significato semantico.</p><p>Le specifiche di <strong><strong>HTML5</strong></strong> dicono che i tag <code>&lt;b&gt;</code> e <code>&lt;i&gt;</code> dovrebbero essere usati come come ultima risorsa se nessun altro tag è disponibile. </p><p>Fai così invece ⬇️:</p><pre><code>&lt;p&gt;&lt;strong&gt;Programma al tuo ritmo&lt;/strong&gt;&lt;p&gt;

&lt;p&gt;&lt;em&gt;programma al tuo ritmo&lt;/em&gt;&lt;p&gt;
</code></pre><h3 id="non-posizionare-elementi-block-level-dentro-elementi-inline"><strong>Non posizionare elementi block-level dentro elementi inline</strong></h3><p>Gli elementi block-level iniziano in una nuova linea su una pagina web. Di default, occupano una riga intera su una pagina. Non sarai in grado di aggiungere contenuti inline a un elemento block-level senza usare CSS.</p><p>Gli elementi <code>&lt;p&gt;</code>, <code>&lt;h1&gt;-&lt;h6&gt;</code> e <code>&lt;div&gt;</code> sono alcuni degli esempi di un elemento block-level.</p><p>Gli elementi inline occupa l'area più piccola su una pagina web. Non iniziano su una nuova riga su una pagina web.</p><p>Gli elementi <code>&lt;span&gt;</code>, <code>&lt;em&gt;</code> e <code>&lt;a&gt;</code> sono alcuni esempi di elementi inline.</p><p>Non puoi posizionare elementi block-level all'interno di elementi inline.</p><p>Non fare questo ⬇️:</p><pre><code>&lt;a href="#" &gt;

    &lt;p&gt; Visita freecodecamp &lt;/p&gt;

&lt;/a&gt;
</code></pre><p>Non puoi inserire un <code>&lt;p&gt;</code> dentro un <code>&lt;a&gt;</code> perché <code>&lt;p&gt;</code> è un elemento block-level e <code>&lt;a&gt;</code> è un elemento inline.</p><p>Fai così invece ⬇️:</p><pre><code>&lt;p&gt;
Visita &lt;a href="www.freecodecamp. org" target="_blank"&gt;FreecodeCamp&lt;/a&gt; 
per imparare Javascript
&lt;/p&gt;
</code></pre><p>L'esempio sopra è il modo migliore per annidare elementi inline all'interno un elemento block-level.</p><p>È importante notare che:</p><ul><li>L'elemento block-level non può essere annidato dentro un elemento inline.</li><li>L'elemento inline può essere annidato dentro un elemento block-level.</li><li>Elementi inline e block-level possono essere annidati dentro un elemento block-level.</li></ul><p>Una nota veloce: annidare, nell'esempio precedente, significa "posizionare all'interno". Perciò, quando dico che non può essere annidato, mi riferisco al fatto che un elemento non può essere collocato all'interno di un altro.</p><p>Spero che tu abbia compreso queste tre semplici regole usate per annidare elementi.</p><p>È anche possibile convertire elementi block-level in elementi inline e viceversa, usando il CSS. Scrivi <code>display: inline-block</code> e <code>display: inline</code> per convertire un elemento da block-level a inline.</p><p>È importante ricordare che solo perché il tuo codice funziona non vuol dire che stai seguendo le pratiche migliori.</p><p>Questo è il motivo per cui ti consiglio di usare sempre il <a href="https://validator.w3.org/">servizio di convalida del markup W3C</a> per controllare il tuo codice.</p><p>Questo validatore controlla la validità del markup dei documenti HTML, XHTML, SMIL, MathML, ecc.</p><p>Puoi controllare il tuo codice copiando il suo URL e incollandolo sul sito o caricando il tuo file HTML.</p><h2 id="conclusione"><strong>Conclusione</strong></h2><p>Spero che questo articolo ti abbia aiutato a imparare qualcosa di nuovo sulle migliori pratiche HTML. Ho provato a includere solo i consigli più utili, così che tu possa iniziare ad usarli fin da subito!</p><p>Se hai altre domande o commenti, sentiti libero/a di contattarmi in qualsiasi momento su Twitter <a href="http://www.twitter.com/cessss_">@cessss_</a> e LinkedIn: <a href="https://www.linkedin.com/in/success-eriamiantoe/">Success</a></p><p>Proverò a rispondere il prima possibile! Grazie per aver letto questo articolo 💙.</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Gestione degli errori in Python – Spiegazione di try, except, else e finally con esempi di codice ]]>
                </title>
                <description>
                    <![CDATA[ Di recente, il mio manager mi ha incaricato di creare un report automatico. Ho progettato il report affinché fosse semplice. Includeva un po' di numeri da un database e alcune operazioni matematiche basilari. Ero entusiasta di poter finalmente mettere in mostra in azienda le mie incredibili abilità con Python. Ho ]]>
                </description>
                <link>https://www.freecodecamp.org/italian/news/gestione-degli-errori-in-python-spiegazione-di-try-except-else-e-finally/</link>
                <guid isPermaLink="false">66fb06530a4dbd1c170ebaba</guid>
                
                    <category>
                        <![CDATA[ Python ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Monica Jin ]]>
                </dc:creator>
                <pubDate>Fri, 04 Oct 2024 09:07:02 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/italian/news/content/images/2024/10/game-over-screen.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Articolo originale:</strong> <a href="https://www.freecodecamp.org/news/error-handling-in-python-introduction/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Error Handling in Python – try, except, else, &amp; finally Explained with Code Examples</a>
      </p><p>Di recente, il mio manager mi ha incaricato di creare un report automatico. Ho progettato il report affinché fosse semplice. Includeva un po' di numeri da un database e alcune operazioni matematiche basilari. Ero entusiasta di poter finalmente mettere in mostra in azienda le mie <em>incredibili</em> abilità con Python.</p><p>Ho completato e consegnato il prodotto. Tutto andava alla grande. O almeno, fino a due settimane più tardi. Il mio report ha cominciato a fallire improvvisamente a causa di un errore di divisione per zero. È il momento di far partire la risata registrata.</p><p>La mia breve storia non è particolarmente dettagliata, ma dovrebbe enfatizzare l'importanza di gestire casi limite ed errori quando si scrivono programmi. Questo report sarebbe dovuto essere un'opportunità per mettere in mostra la mia competenza in Python, invece, ne è risultata una figuraccia piuttosto imbarazzante.</p><p>Perciò, prendiamoci un momento per imparare le basi della gestione degli errori utilizzando la libreria standard di Python. Metterò in evidenza alcune delle cose di cui hai bisogno per iniziare.</p><p>Prima di iniziare a gestire eccezioni, dovresti avere una buona comprensione dei fondamenti di Python. Avrai bisogno di sapere perché le eccezioni vengono generate per poterle trattare!</p><h3 id="ecco-cosa-tratteremo-"><strong>Ecco cosa tratteremo:</strong></h3><ol><li><a href="#istruzioni-try-ed-except-in-python">Istruzioni try ed except in Python</a></li><li><a href="#esecuzione-condizionale-con-la-clausola-else">Esecuzione condizionale con la clausola else</a></li><li><a href="#eccezioni-predefinite">Eccezioni predefinite</a></li><li><a href="#eccezioni-personalizzate">Eccezioni personalizzate</a></li><li><a href="#considerazioni-sulle-prestazioni">Considerazioni sulle prestazioni</a></li></ol><h2 id="istruzioni-try-ed-except-in-python"><strong>Istruzioni try ed except in Python</strong></h2><p>Le istruzioni <code>try</code> ed <code>except</code> sono i metodi principali per trattare le eccezioni. Ecco un esempio:</p><pre><code class="language-python">x = 0
try:
    print(5 / x)
except ZeroDivisionError:
    print("Qualcosa è andato storto")

# Qualcosa è andato storto
</code></pre><p>Rivediamo il codice qui sopra per essere sulla stessa lunghezza d'onda:</p><ol><li>La riga 1 assegna il valore 0 alla variabile <code>x</code></li><li>Le righe 2 e 3 aprono una clausola <code>try</code> e tentano di dividere 5 per la variabile <code>x</code></li><li>Le righe 4 e 5 aprono una clausola <code>except</code> per qualsiasi errore di divisione per zero (<code>ZeroDivisionError</code>) e istruiscono il programma a stampare un messaggio qualora si tentasse di dividere per 0</li></ol><p>Probabilmente avrai notato il problema: la variabile <code>x</code> ha valore 0, e sto cercando di dividere 5 per <code>x</code> . Neppure i migliori matematici del mondo sono in grado di dividere per 0, e nemmeno Python può farlo. Quindi, che succede?</p><p>Se non ci occupassimo dell'errore, il programma terminerebbe immediatamente, non appena cercasse di dividere 5 per <code>x</code>. Dato che i programmi non sanno cosa fare con le eccezioni senza istruzioni esplicite, abbiamo creato la clausola <code>except</code> nella riga 4 e fornito al programma i passi da seguire in caso di divisione per 0.</p><p>Questa è l'intera idea dietro la gestione delle eccezioni: occorre dire al programma cosa fare quando si verifica un errore che non può semplicemente ignorare. Vediamo come funzionano le clausole <code>try</code> ed <code>except</code>.</p><h3 id="analisi-dell-istruzione-try"><strong>Analisi dell'istruzione try</strong></h3><p>Le clausole <code>try</code> ed <code>except</code> seguono un modello che ti permette di gestire in modo affidabile i problemi nel tuo codice. Vediamo come funziona.</p><p>Il primo passo è tentare l'esecuzione del codice nella clausola <code>try</code>.</p><p>Dopodiché, abbiamo tre possibilità:</p><h4 id="nessun-errore-nella-clausola-try"><strong>Nessun errore nella clausola try</strong></h4><p>Se il codice nella clausola <code>try</code> viene eseguito <strong>senza nessun errore</strong>, il programma:</p><ol><li>Esegue la clausola <code>try</code> </li><li>Salta tutte le clausole <code>except</code></li><li>Prosegue con la sua normale esecuzione</li></ol><pre><code class="language-python">x = 1
try:
    print(5 / x)
except ZeroDivisionError:
    print("Qualcosa è andato storto")

print("Sto eseguendo dopo la clausola try!")

# 5.0
# Sto eseguendo dopo la clausola try!
</code></pre><p>In questo esempio modificato, puoi vedere che non ci sono problemi nella clausola <code>try</code> (righe 3 e 4). Il codice verrà eseguito, la clausola <code>except</code> verrà saltata e il programma riprenderà l'esecuzione dopo la terminazione delle istruzioni <code>try</code> ed <code>except</code>.</p><h4 id="errori-nella-clausola-try-e-l-eccezione-specificata"><strong>Errori nella clausola try e l'eccezione è specificata</strong></h4><p>Se il codice nella clausola <code>try</code> <strong>genera un'eccezione</strong> e <strong>il tipo di eccezione viene specificato dopo qualsiasi parola chiave con </strong><code>except</code><strong><strong> </strong></strong>, il programma:</p><ol><li>Salta il codice rimanente nella clausola <code>try</code></li><li>Esegue il codice nella clausola <code>except</code> corrispondente</li><li>Prosegue con la sua normale esecuzione</li></ol><pre><code class="language-python">x = 0
try:
    print(5 / x)
except ZeroDivisionError:
    print("Qualcosa è andato storto")

print("Sto eseguendo dopo la clausola try!")

# Qualcosa è andato storto
# Sto eseguendo dopo la clausola try!
</code></pre><p>Tornando al mio primo esempio, ho cambiato la nostra variabile <code>x</code> di nuovo al valore 0 e ho provato a dividere 5 per <code>x</code>. Ciò produce un &nbsp;errore di divisione per zero (<code>ZeroDivisionError</code>). Dato che l'istruzione <code>except</code> specifica questo tipo di eccezione, il codice in quella clausola viene eseguito prima che il programma riprenda la sua normale esecuzione.</p><h4 id="errori-nella-clausola-try-e-l-eccezione-non-specificata"><strong>Errori nella clausola Try e l'Eccezione NON è Specificata</strong></h4><p>Infine, se il programma genera un'eccezione nella clausola <code>try</code>, <strong>ma l'eccezione non viene specificata in nessuna istruzione </strong><code>except</code>, allora il programma:</p><ol><li>Interrompe l'esecuzione del programma e dà errore</li></ol><pre><code class="language-python">x = 0
try:
    print(5 / y)
except:
    print("Qualcosa è andato storto")

print("Sto eseguendo dopo la clausola try!")

# NameError: name 'y' is not defined (il nome 'y' non è definito)
</code></pre><p>Nell'esempio precedente, sto cercando di dividere 5 per la variabile <code>y</code>, che non esiste. Questo genera un errore di nome (<code>NameError</code>). Non abbiamo specificato al programma come gestire i <code>NameError</code>, perciò l'unica opzione è quella di terminare.</p><h3 id="pulizia"><strong>Pulizia</strong></h3><p><code>try</code> ed <code>except</code> sono gli strumenti principali della gestione degli errori, ma esiste anche una clausola opzionale che puoi usare, chiamata <code>finally</code>. La clausola <code>finally</code> verrà sempre eseguita, che ci sia un errore o meno.</p><pre><code class="language-python">x = 0
try:
    print(5 / x)
except ZeroDivisionError:
    print("Sono la clausola except!")
finally:
    print("Sono la clausola finally!")

print("Sto eseguendo dopo la clausola try!")

# Sono la clausola except!
# Sono la clausola finally!
# Sto eseguendo dopo la clausola try!
</code></pre><p>In questo esempio, ho creato il nostro amato <code>ZeroDivisionError</code>. Puoi vedere che l'ordine di esecuzione è:</p><ol><li>La clausola <code>except</code></li><li>La clausola <code>finally</code></li><li>Qualsiasi codice successivo</li></ol><p>Una volta che correggiamo il codice nella clausola <code>try</code> in modo che non generi più errori, vedrai comunque un ordine di esecuzione simile. Al posto della clausola <code>except</code>, verrà eseguita la clausola <code>try</code>.</p><pre><code class="language-python">x = 1
try:
    print(5 / x)
except ZeroDivisionError:
    print("Sono la clausola except!")
finally:
    print("Sono la clausola finally!")

print("Sto eseguendo dopo la clausola try!")

# 5.0
# Sono la clausola finally!
# Sto eseguendo dopo la clausola try!
</code></pre><p>Noterai che l'unica differenza è che la clausola <code>try</code> viene eseguita con successo perché non vengono generate eccezioni. La clausola <code>finally</code> e il codice successivo vengono eseguiti come previsto.</p><p>Questo è utile in alcuni casi in cui vuoi dare una "ripulita" indipendentemente dall'esito delle clausole <code>try</code> e <code>except</code>. Azioni come chiudere connessioni, chiudere file e fare logging sono ottimi candidati per la clausola <code>finally</code>.</p><h2 id="esecuzione-condizionale-con-la-clausola-else"><strong>Esecuzione condizionale con la clausola else</strong></h2><p>Un'altra clausola opzionale è la clausola <code>else</code>. La clausola <code>else</code> è semplice: se il codice nella clausola <code>try</code> viene eseguito senza generare errori, allora anche il codice nella clausola <code>else</code> verrà eseguito.</p><pre><code class="language-python">x = 1
try:
    print(5 / x)
except ZeroDivisionError:
    print("Sono la clausola except!")
else:
    print("Sono la clausola else!")
finally:
    print("Sono la clausola finally!")

print("Sto eseguendo dopo la clausola try!")

# 5.0
# Sono la clausola else!
# Sono la clausola finally!
# Sto eseguendo dopo la clausola try!
</code></pre><p>L'ordine di esecuzione per questo esempio è:</p><ol><li>La clausola <code>try</code></li><li>La clausola <code>else</code></li><li>La clausola <code>finally</code></li><li>Qualsiasi codice dopo</li></ol><p>Se dovessimo incontrare un'eccezione o un errore nella clausola <code>try</code>, la clausola <code>else</code> verrebbe ignorata.</p><pre><code class="language-python">x = 0
try:
    print(5 / x)
except ZeroDivisionError:
    print("Sono la clausola except!")
else:
    print("Sono la clausola else!")
finally:
    print("Sono la clausola finally!")

print("Sto eseguendo dopo la clausola try!")

# Sono la clausola except!
# Sono la clausola finally!
# Sto eseguendo dopo la clausola try!
</code></pre><h2 id="eccezioni-predefinite"><strong>Eccezioni predefinite</strong></h2><p>Mi hai visto scrivere a proposito di due diversi errori finora: <code>NameError</code> e <code>ZeroDivisionError</code>. Ma se avessimo bisogno di altre eccezioni?</p><p>Esiste un'intera lista di eccezioni predefinite in Python che fanno parte della libreria standard. Probabilmente coprono quasi tutte le necessità che potresti avere nella gestione di errori ed eccezioni.</p><p>Ecco solo alcune che potrebbero essere importanti:</p><ul><li><code>KeyError</code> – Una chiave non viene trovata in un dizionario</li><li><code>IndexError</code> – L'indice è fuori dai limiti stabiliti di un oggetto iterabile</li><li><code>TypeError</code> – Una funzione o un'operazione è stata usata su un tipo di oggetto sbagliato</li><li><code>OSError</code> – Errori generali del sistema operativo</li></ul><p>Ce ne sono molte altre, che puoi trovare nella documentazione di Python. Consiglio di darci un'occhiata. Non solo diventerai più bravo a gestire gli errori, ma esplorerai anche cosa può <em>effettivamente</em> andare storto nei i tuoi programmi Python.</p><h2 id="eccezioni-personalizzate"><strong>Eccezioni personalizzate</strong></h2><p>Se hai bisogno di funzionalità estese, puoi anche definire delle eccezioni personalizzate.</p><pre><code class="language-python">class ForError(Exception):
    def __init__(self, message):
        self.message = message

    def foo(self):
        print("bar")
</code></pre><p>Nell'esempio sopra, ho creato una nuova classe e l'ho estesa dalla classe Exception. Ora posso scrivere una funzionalità personalizzata e trattare questa eccezione come qualsiasi altro oggetto.</p><pre><code class="language-python">try:
    raise FooError("Questo è un errore di test")
except FooError as e:
    e.foo()

# bar
</code></pre><p>Qui ho generato di proposito il mio nuovo <code>FooError</code>. Ho catturato <code>FooError</code> e gli assegno l'alias <code>e</code>. Ora posso accedere al mio metodo <code>foo()</code> che ho costruito nella classe che ho creato.</p><p>Questo apre un mondo di possibilità quando si ha a che fare con gli errori. Log personalizzati, tracciamenti più dettagliati, o qualsiasi altra cosa di cui hai bisogno, tutto può essere codificato e creato.</p><h2 id="considerazioni-sulle-prestazioni"><strong>Considerazioni sulle prestazioni</strong></h2><p>Ora che conosci le basi di <code>try</code>, <code>except</code> e degli oggetti eccezione, puoi cominciare a considerare di usarli nel tuo codice per gestire gli errori in modo elegante. Ma ci sono impatti significativi sulle prestazioni del codice?</p><p>La risposta breve è no. Con il rilascio di Python 3.11, non c'è praticamente nessuna riduzione di velocità nell'uso delle istruzioni <code>try</code> ed <code>except</code> quando non vengono sollevate eccezioni.</p><p>La cattura degli errori ha causato effettivamente qualche rallentamento. Ma in generale, è meglio catturare questi errori piuttosto che far crashare l'intero programma.</p><p>Nelle versioni precedenti di Python, usare le clausole <code>try</code> ed <code>except</code> causava del tempo di esecuzione aggiuntivo. Tieni presente questo dettaglio se non hai la versione aggiornata.</p><h2 id="ricapitolando">Ricapitolando</h2><p>Grazie per aver letto fino a qui. Il futuro te e i tuoi futuri clienti ti ringrazieranno per la gestione degli errori.</p><p>Abbiamo esaminato le clausole <code>try</code>, <code>except</code>, <code>else</code>, e <code>finally</code>, il loro ordine di esecuzione e in quali circostanze vengono eseguite. Abbiamo anche visto le basi per creare eccezioni personalizzate.</p><p>La cosa più importante da ricordare è che le clausole <code>try</code> ed <code>except</code> sono i modi principali per gestire gli errori e dovresti usarle ogni volta che hai del codice rischioso e che potrebbe generare degli errori.</p><p>Inoltre, tieni a mente che la cattura degli errori renderà il tuo codice più resiliente e ti farà sembrare un programmatore decisamente migliore.</p> ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
