{"id":23966,"date":"2023-10-27T09:00:00","date_gmt":"2023-10-27T07:00:00","guid":{"rendered":"https:\/\/www.codemotion.com\/magazine\/?p=23966"},"modified":"2023-10-17T12:19:27","modified_gmt":"2023-10-17T10:19:27","slug":"gestione-errori-python","status":"publish","type":"post","link":"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/gestione-errori-python\/","title":{"rendered":"La gestione degli errori resa semplice: una introduzione in Python"},"content":{"rendered":"\n<p>Sviluppare software pu\u00f2 essere un compito difficile, specialmente per progetti &#8220;grandi&#8221;. Le aspettative sono quelle per cui premiamo un pulsante e tutto funziona bene e senza intoppi. Peccato che la realt\u00e0 sia un po\u2019 pi\u00f9 complicata di cos\u00ec\u2026 Ci\u00f2 che vogliamo dire \u00e8 che i sistemi creati con il software sono fragili, e che gli errori sono nascosti in ogni riga di codice e possono danneggiare il software, portando all\u2019interruzione del programma. In questo articolo, descriveremo alcuni intoppi tipici che possiamo incontrare e come procedere a una efficace gestione degli errori in <a href=\"https:\/\/www.codemotion.com\/magazine\/it\/linguaggi-programmazione\/programmare-con-python\/\" class=\"ek-link\">Python<\/a> tramite le eccezioni.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-perche-la-gestione-degli-errori-e-cosi-importante\">Perch\u00e9 la gestione degli errori \u00e8 cos\u00ec importante?<\/h2>\n\n\n\n<p>La gestione degli errori in Python non \u00e8 altro che la capacit\u00e0 di comprendere che ogni pezzo di codice possa fallire per diverse ragioni.<\/p>\n\n\n\n<p>Questa capacit\u00e0 &#8211; che si sviluppa con l&#8217;esperienza pratica sviluppando codice &#8211; consente ai programmatori di anticipare gli errori possibili che possono verificarsi in un pezzo di codice o in un programma.<\/p>\n\n\n\n<p>Questa anticipazione fa s\u00ec che i programmatori esperti preparino \u201dil terreno per una controffensiva\u201d in modo tale che il codice non si interrompa a causa di un errore.<\/p>\n\n\n\n<p>In altre parole, l&#8217;obiettivo di un programmatore non \u00e8 solo creare software. \u00c8 anche creare software che non si interromper\u00e0 quando gli utenti andranno ad utilizzarlo.<\/p>\n\n\n\n<p>Per essere sicuri che il codice non si interrompa, abbiamo due opzioni in Python:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Gestione delle eccezioni.<\/li>\n\n\n\n<li>Unit tests.<\/li>\n<\/ul>\n\n\n\n<p>Questo articolo \u00e8 un&#8217;introduzione alla gestione delle eccezioni in Python.<\/p>\n\n\n\n<p>Si consideri che un programma ben scritto generalmente ha bisogno sia della gestione delle eccezioni che degli unit tests. Quindi, gestire solamente le eccezioni non \u00e8 sufficiente per essere sicuri che il codice non si interrompa.<\/p>\n\n\n\n<p>Ma, a tutti gli effetti, \u00e8 un buon punto di partenza.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><strong>Lettura consigliata: <a href=\"https:\/\/www.codemotion.com\/magazine\/it\/intelligenza-artificiale\/sviluppo-chatbot-con-python\/\" class=\"ek-link\">Come sviluppare il tuo Chatbot con Python e ChatterBot partendo da zero<\/a><\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-gestione-degli-errori-in-python-i-piu-comuni\">Gestione degli errori in Python: i pi\u00f9 comuni<\/h2>\n\n\n\n<p>Vediamo alcuni intoppi comuni che possono verificarsi durante la scrittura del codice e come procedere alla gestione degli errori in Python in modo da poter capire come anticiparli quando scriviamo il codice.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-syntaxerror\">SyntaxError<\/h3>\n\n\n\n<p>In Python, si verifica un SyntaxError quando l&#8217;interprete incontra codice che viola le regole di sintassi del linguaggio. Queste regole determinano come dovrebbe essere strutturato il codice Python, inclusa la corretta indentazione, l&#8217;uso corretto delle parole chiave e il posizionamento di parentesi, parentesi graffe e dei due punti.<\/p>\n\n\n\n<p>Quando l&#8217;interprete incontra un SyntaxError, non pu\u00f2 procedere con l&#8217;esecuzione del programma finch\u00e9 l&#8217;errore non viene corretto.<\/p>\n\n\n\n<p>Vediamo un paio di esempi di codice.<\/p>\n\n\n\n<h4 class=\"gb-headline gb-headline-33038f8f gb-headline-text\"><strong>Esempio 1: mancanza di parentesi<\/strong><\/h4>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-keyword\">print<\/span>(<span class=\"hljs-string\">\"Hello, World\"<\/span>\r\n\r\n&gt;&gt;&gt;\r\n\r\nInput In &#91;<span class=\"hljs-number\">1<\/span>]\r\n    <span class=\"hljs-keyword\">print<\/span>(<span class=\"hljs-string\">\"Hello, World\"<\/span>\r\n                        ^\r\nSyntaxError: unexpected EOF <span class=\"hljs-keyword\">while<\/span> parsing<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Qui l&#8217;interprete Python ci dice che c&#8217;\u00e8 un SyntaxError. In particolare, &#8220;unexpected EOF while parsing&#8221; in Python sta per &#8220;fine del file inaspettata durante l&#8217;analisi&#8221;. Questo errore si verifica quando l&#8217;interprete Python incontra una situazione in cui si aspetta pi\u00f9 codice (come la fine di un&#8217;istruzione o di un blocco), ma il file o l&#8217;input che sta leggendo termina prematuramente.<\/p>\n\n\n\n<p>Possiamo vedere che Python ci aiuta a capire dove sta l&#8217;errore con il simbolo ^. Infatti manca una parentesi per chiudere il metodo print().<\/p>\n\n\n\n<h4 class=\"gb-headline gb-headline-c9dbcb50 gb-headline-text\"><strong>Esempio 2: nome della variablie non valido<\/strong><\/h4>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-number\">123<\/span>abc = <span class=\"hljs-string\">\"Invalid variable name\"<\/span>\r\nprint(<span class=\"hljs-number\">123<\/span>abc)\r\n\r\n&gt;&gt;&gt;\r\n\r\nInput In &#91;<span class=\"hljs-number\">2<\/span>]\r\n    <span class=\"hljs-number\">123<\/span>abc = <span class=\"hljs-string\">\"Invalid variable name\"<\/span>\r\n       ^\r\n<span class=\"hljs-built_in\">SyntaxError<\/span>: invalid syntax<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>In questo secondo esempio, l&#8217;interprete Python ha sollevato un SyntaxError che ci dice che abbiamo scritto una sintassi non valida.<\/p>\n\n\n\n<p>In effetti, non possiamo nominare le variabili come abbiamo fatto in questo esempio.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><strong>Lettura consigliata: <a href=\"https:\/\/www.codemotion.com\/magazine\/it\/linguaggi-programmazione\/introduzione-alle-tecniche-di-clustering\/\" class=\"ek-link\">Apprendimento Non Supervisionato in Python: Una Introduzione alle Tecniche di Clustering per Scoprire i Pattern<\/a><\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">TypeError<\/h3>\n\n\n\n<p>In Python, si verifica un TypeError quando si esegue un&#8217;operazione o si utilizza una funzione con un oggetto di tipo inappropriato o incompatibile con essa.<\/p>\n\n\n\n<p>Questo accade tipicamente quando si cerca di combinare oggetti o eseguire operazioni che non sono supportate dai loro tipi di dati.<\/p>\n\n\n\n<p>Il TypeError \u00e8 un&#8217;eccezione comune ed \u00e8 utilizzato per rilevare problemi legati alle incompatibilit\u00e0 di tipo ed \u00e8 un errore frequente<a href=\"https:\/\/www.codemotion.com\/magazine\/it\/data-science-it\/analisi-dei-dati-pandas\/\" class=\"ek-link\"> quando si lavora con dati<\/a>.<\/p>\n\n\n\n<p>Vediamo un paio di esempi.<\/p>\n\n\n\n<h4 class=\"gb-headline gb-headline-393c2147 gb-headline-text\"><strong>Esempio 1: sommare interi con stringhe<\/strong><\/h4>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">x = <span class=\"hljs-number\">5<\/span>\r\ny = <span class=\"hljs-string\">\"2\"<\/span>\r\nz = x + y  \r\n\r\n&gt;&gt;&gt;\r\n\r\n<span class=\"hljs-built_in\">TypeError<\/span>                                 Traceback (most recent call last)\r\nInput In &#91;<span class=\"hljs-number\">3<\/span>], <span class=\"hljs-keyword\">in<\/span> &lt;cell line: <span class=\"hljs-number\">3<\/span>&gt;()\r\n      <span class=\"hljs-number\">1<\/span> x = <span class=\"hljs-number\">5<\/span>\r\n      <span class=\"hljs-number\">2<\/span> y = <span class=\"hljs-string\">\"2\"<\/span>\r\n----&gt; <span class=\"hljs-number\">3<\/span> z = x + y\r\n\r\n<span class=\"hljs-attr\">TypeError<\/span>: unsupported operand type(s) <span class=\"hljs-keyword\">for<\/span> +: <span class=\"hljs-string\">'int'<\/span> and <span class=\"hljs-string\">'str'<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Questo esempio mostra che l\u2019interprete Python ha trovato un errore nella riga 3. Questo \u00e8 un TypeError perch\u00e9 stiamo provando a sommare un intero ( x = 5 ) con una stringa ( y = &#8220;2&#8221; ). Il che, ovviamente, non \u00e8 possibile.<\/p>\n\n\n\n<h4 class=\"gb-headline gb-headline-dc708e97 gb-headline-text\"><strong>Esempio 2: concatenare liste ed interi<\/strong><\/h4>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">numbers = &#91;<span class=\"hljs-number\">1<\/span>, <span class=\"hljs-number\">2<\/span>, <span class=\"hljs-number\">3<\/span>]\r\ntotal = numbers + <span class=\"hljs-number\">4<\/span> \r\n\r\n&gt;&gt;&gt;\r\n\r\nTypeError                                 Traceback (most recent call last)\r\nInput In &#91;<span class=\"hljs-number\">4<\/span>], in &lt;cell line: <span class=\"hljs-number\">2<\/span>&gt;()\r\n      <span class=\"hljs-number\">1<\/span> numbers = &#91;<span class=\"hljs-number\">1<\/span>, <span class=\"hljs-number\">2<\/span>, <span class=\"hljs-number\">3<\/span>]\r\n----&gt; <span class=\"hljs-number\">2<\/span> total = numbers + <span class=\"hljs-number\">4<\/span>\r\n\r\nTypeError: can only concatenate <span class=\"hljs-keyword\">list<\/span> (not <span class=\"hljs-string\">\"int\"<\/span>) to <span class=\"hljs-keyword\">list<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>In questo esempio, stiamo cercando di concatenare una lista (numbers) con un intero (4)<\/p>\n\n\n\n<p>Sfortunatamente, la concatenazione non pu\u00f2 essere fatta tra un intero ed una lista. Quindi, se vogliamo aggiungere il numero 4 alla lista numbers dobbiamo effettuare una operazione diversa.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">ValueError<\/h3>\n\n\n\n<p>In Python, si verifica un ValueError quando un&#8217;operazione o una funzione riceve un argomento del tipo corretto ma con un valore inappropriato o non valido.&nbsp; Questo errore, quindi,&nbsp; indica che il valore fornito non \u00e8 accettabile per l&#8217;operazione eseguita.<\/p>\n\n\n\n<p>ValueError si presenta comunemente quando i dati non possono essere convertiti nel tipo previsto o quando una funzione riceve un argomento al di fuori dell&#8217;intervallo accettabile.<\/p>\n\n\n\n<h4 class=\"gb-headline gb-headline-f4a3bec4 gb-headline-text\"><strong>Esempio 1: tentativo di convertire una stringa in un intero<\/strong><\/h4>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">num_str = <span class=\"hljs-string\">\"abc\"<\/span>\r\nnum = int(num_str)\r\n\r\n&gt;&gt;&gt;\r\n\r\nValueError                                Traceback (most recent call last)\r\nInput In &#91;<span class=\"hljs-number\">9<\/span>], <span class=\"hljs-keyword\">in<\/span> &lt;cell line: <span class=\"hljs-number\">2<\/span>&gt;()\r\n      <span class=\"hljs-number\">1<\/span> num_str = <span class=\"hljs-string\">\"abc\"<\/span>\r\n----&gt; <span class=\"hljs-number\">2<\/span> num = int(num_str)\r\n\r\n<span class=\"hljs-attr\">ValueError<\/span>: invalid literal <span class=\"hljs-keyword\">for<\/span> int() <span class=\"hljs-keyword\">with<\/span> base <span class=\"hljs-number\">10<\/span>: <span class=\"hljs-string\">'abc'<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>L\u2019interprete Python ha sollevato un ValueError in questo caso perch\u00e9 il metodo int() non pu\u00f2 creare un intero dalla stringa che gli \u00e8 stata passata come argomento.&nbsp;<\/p>\n\n\n\n<h4 class=\"gb-headline gb-headline-ab2685e7 gb-headline-text\"><strong>Esempio 2: analisi di una stringa di data non valida<\/strong><\/h4>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">import<\/span> datetime\r\n\r\ndate_str = <span class=\"hljs-string\">\"2023-20-30\"<\/span>\r\ndate = datetime.datetime.strptime(date_str, <span class=\"hljs-string\">\"%Y-%m-%d\"<\/span>) \r\n\r\n\r\n&gt;&gt;&gt;\r\n\r\nValueError: time data <span class=\"hljs-string\">'2023-20-40'<\/span> does not match format <span class=\"hljs-string\">'%Y-%m-%d'<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>In questo caso, l&#8217;interprete Python solleva un ValueError perch\u00e9 la stringa contenente la data non corrisponde allo standard che abbiamo fornito (il mese numero 20 non esiste nel calendario!).<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><strong>Lettura consigliata: <a href=\"https:\/\/www.codemotion.com\/magazine\/it\/data-science-it\/python-e-databricks-la-giusta-accoppiata-per-dominare-i-dati\/\" class=\"ek-link\">Python e DataBricks: la giusta accoppiata per dominare i dati<\/a><\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">IndexError<\/h3>\n\n\n\n<p>In Python, si verifica un IndexError&nbsp; quando si sta tentando di accedere a un indice o a un elemento di una sequenza (come una lista, una tupla o una stringa) utilizzando un indice che \u00e8 fuori intervallo o quando non esiste.<\/p>\n\n\n\n<p>Questo errore indica, in genere, che si sta tentando di accedere a un elemento in una posizione che non esiste all&#8217;interno della sequenza indicata.<\/p>\n\n\n\n<h4 class=\"gb-headline gb-headline-0f3363b2 gb-headline-text\"><strong>Esempio: accesso all\u2019indice di una lista fuori dal range<\/strong><\/h4>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\">my_list = &#91;1, 2, 3]\r\nelement = my_list&#91;5]\r\n\r\n&gt;&gt;&gt;\r\n\r\nIndexError                                Traceback (most recent call last)\r\nInput In &#91;1], in <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">cell<\/span> <span class=\"hljs-attr\">line:<\/span> <span class=\"hljs-attr\">2<\/span>&gt;<\/span>()\r\n      1 my_list = &#91;1, 2, 3]\r\n----&gt; 2 element = my_list&#91;5]\r\n\r\nIndexError: list index out of range<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-7\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>In questo esempio, l&#8217;interprete Python ci dice che c&#8217;\u00e8 un IndexError nella riga 2.<\/p>\n\n\n\n<p>Ci\u00f2 \u00e8 accaduto perch\u00e9 volevamo prendere il quinto elemento da una lista con solo tre elementi.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">ZeroDivisionError<\/h3>\n\n\n\n<p>In Python, si verifica uno ZeroDivisionError quando si sta tentando di dividere un numero per zero.<\/p>\n\n\n\n<p>La divisione per zero \u00e8 matematicamente indefinita, e Python solleva questa eccezione per indicare che l&#8217;operazione non pu\u00f2 essere eseguita.<\/p>\n\n\n\n<h4 class=\"gb-headline gb-headline-6a70fe51 gb-headline-text\"><strong>Esempio: semplice divisione per zero<\/strong><\/h4>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-8\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\">result = 5 \/ 0 \r\n\r\n&gt;&gt;&gt;\r\n\r\nZeroDivisionError                         Traceback (most recent call last)\r\nInput In &#91;2], in <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">cell<\/span> <span class=\"hljs-attr\">line:<\/span> <span class=\"hljs-attr\">1<\/span>&gt;<\/span>()\r\n----&gt; 1 result = 5 \/ 0\r\n\r\nZeroDivisionError: division by zero<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-8\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>In questo esempio, l\u2019interprete Python ha sollevato uno ZeroDivisionError perch\u00e9 stiamo cercando di dividere un numero per zero, ma questo non \u00e8 matematicamente possibile.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Gestione delle eccezioni<\/h2>\n\n\n\n<p>La gestione delle eccezioni \u00e8 il primo passo per sviluppare un programma che non si interompa.<\/p>\n\n\n\n<p>Come abbiamo detto in precedenza, l&#8217;obiettivo \u00e8 quello di anticipare ci\u00f2 che gli utenti potrebbero fare con il programma che abbiamo sviluppato.<\/p>\n\n\n\n<p>Quindi, l&#8217;obiettivo \u00e8 sollevare eccezioni, anticipando le azioni degli utenti, per evitare che il programma si interrompa.<\/p>\n\n\n\n<p>Vediamo come farlo.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><strong>Lettura consigliata:<a href=\"https:\/\/www.codemotion.com\/magazine\/it\/linguaggi-programmazione\/guida-librerie-python-data-science\/\" class=\"ek-link\"> Librerie Python per Data Science: una guida completa<\/a><\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Come utilizzare il blocco try e except&nbsp;<\/h2>\n\n\n\n<p>Il blocco <strong>try<\/strong> e <strong>except<\/strong> rappresenta una modalit\u00e0 tipica con la quale gli sviluppatori Python possono gestire le eccezioni.<\/p>\n\n\n\n<p>Quando prevediamo che possa verificarsi un&#8217;eccezione, la solleviamo, avvisiamo l&#8217;utente e chiudiamo il programma. In questo modo gli utenti potranno eventualmente riprovare con un input diverso e corretto, oppure potranno chiedere supporto. Ma il programma si chiuder\u00e0 e non verr\u00e0 interrotto.<\/p>\n\n\n\n<p>Vediamo un esempio e sviluppiamolo passo dopo passo per vederne le varie sfumature.<\/p>\n\n\n\n<p>Immaginiamo, per esempio, di voler creare una funzione che restituisca la divisione di due numeri inseriti dagli utenti.<\/p>\n\n\n\n<p>Possiamo scrivere il seguente programma:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-9\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-comment\"># User writes numbers via CLI<\/span>\r\nnum1 = input(<span class=\"hljs-string\">\"Enter the first number: \"<\/span>)\r\nnum2 = input(<span class=\"hljs-string\">\"Enter the second number: \"<\/span>)\r\n\r\n<span class=\"hljs-keyword\">try<\/span>:\r\n    division = num1 \/ num2\r\n    <span class=\"hljs-keyword\">print<\/span>(division)\r\nexcept:\r\n    <span class=\"hljs-keyword\">print<\/span>(<span class=\"hljs-string\">\"something was wrong. Please: try again!\"<\/span>)<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-9\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Supponiamo di chiamare questo programma division.py. Questo \u00e8 il tipico esempio in cui diamo questo programma agli utenti e loro lo possono avviare con python3 division.py.&nbsp;<\/p>\n\n\n\n<p>Nel programma che abbiamo scritto stiamo dicendo all\u2019interprete Python le seguenti cose:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Prova a fare la divisione tra i due numeri. Se ci riesci, stampa il risultato.<\/li>\n\n\n\n<li>Stampa \u201csomething was wrong. Please: try again!\u201d se si verifica un errore.<\/li>\n<\/ul>\n\n\n\n<p>Se lanciamo il programma e scegliamo di inserire i numeri 1 e 2 riceviamo:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-10\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">something was wrong. Please: <span class=\"hljs-keyword\">try<\/span> again!<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-10\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Com&#8217;\u00e8 possibile che qualcosa sia andato storto?? Il codice che abbiamo scritto \u00e8 cos\u00ec semplice&#8230;<\/p>\n\n\n\n<p>Ebbene, il primo errore \u00e8 che non abbiamo informazioni su cosa sia andato storto.<\/p>\n\n\n\n<p>Per migliorare il codice precedente, possiamo estendere il blocco delle eccezioni chiedendo all&#8217;interprete Python di dichiarare l&#8217;eccezione.<\/p>\n\n\n\n<p>Possiamo farlo in questo modo:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-11\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-comment\"># User writes numbers via CLI<\/span>\r\nnum1 = input(<span class=\"hljs-string\">\"Enter the first number: \"<\/span>)\r\nnum2 = input(<span class=\"hljs-string\">\"Enter the second number: \"<\/span>)\r\n\r\n<span class=\"hljs-keyword\">try<\/span>:\r\n    division = num1 \/ num2\r\n    <span class=\"hljs-keyword\">print<\/span>(division)\r\nexcept <span class=\"hljs-keyword\">Exception<\/span> <span class=\"hljs-keyword\">as<\/span> e:\r\n    <span class=\"hljs-keyword\">print<\/span>(<span class=\"hljs-string\">\"something was wrong. Please: try again!\"<\/span>, e)<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-11\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Ora il blocco except \u00e8 stato esteso e, se viene sollevata un&#8217;eccezione, la stampa in modo che noi possiamo effettuare ulteriori indagini.<\/p>\n\n\n\n<p>Quindi, se lanciamo nuovamente il programma e scegliamo 1 e 2 otteniamo:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-12\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">something was wrong. Please: <span class=\"hljs-keyword\">try<\/span> again! unsupported operand type(s) <span class=\"hljs-keyword\">for<\/span> \/: <span class=\"hljs-string\">'str'<\/span> and <span class=\"hljs-string\">'str'<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-12\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Ecco quello che \u00e8 successo: il metodo input() inserisce delle stringhe. Quindi, anche se passiamo numeri interi, li trasforma in stringhe: ecco perch\u00e9 l\u2019interprete Python non \u00e8 riuscito a calcolare la divisione che volevamo.<\/p>\n\n\n\n<p>Le stringhe possono essere trasformate in interi col metodo int() per come segue:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-13\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-comment\"># User writes numbers via CLI<\/span>\r\nnum1 = input(<span class=\"hljs-string\">\"Enter the first number: \"<\/span>)\r\nnum2 = input(<span class=\"hljs-string\">\"Enter the second number: \"<\/span>)\r\n\r\n<span class=\"hljs-comment\"># Transform strings into integers<\/span>\r\nnum1 = int(num1)\r\nnum2 = int(num2)\r\n\r\n<span class=\"hljs-keyword\">try<\/span>:\r\n    division = num1 \/ num2\r\n    <span class=\"hljs-keyword\">print<\/span>(division)\r\nexcept <span class=\"hljs-keyword\">Exception<\/span> <span class=\"hljs-keyword\">as<\/span> e:\r\n    <span class=\"hljs-keyword\">print<\/span>(<span class=\"hljs-string\">\"something was wrong. Please: try again!\"<\/span>, e)<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-13\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Ora, se scegliamo 1 e 2 il programma ci dar\u00e0 come risultato 0.5, come ci aspettavamo.<\/p>\n\n\n\n<p>Quindi, se scegliamo num2 = 0 otteniamo l&#8217;eccezione prevista:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-14\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">something was wrong. Please: <span class=\"hljs-keyword\">try<\/span> again! division by zero<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-14\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Conclusioni<\/h2>\n\n\n\n<p>Questo tutorial voleva essere un&#8217;introduzione alla gestione degli errori in Python utilizzando il blocco <strong>try<\/strong> e <strong>except<\/strong> che \u00e8 un modo tipico di gestione gli errori.<\/p>\n\n\n\n<p>Come abbiamo documentato, l\u2019obiettivo che dobbiamo avere in mente \u00e8 il modo in cui gli utenti potrebbero interrompere il programma che abbiamo scritto, e anticiparli.<\/p>\n\n\n\n<p>Nel caso di cui abbiamo parlato, l\u2019errore tipico che si pu\u00f2 fare quando si divide \u00e8 scegliere 0 come denominatore: poich\u00e9 questo non \u00e8 matematicamente possibile, dobbiamo dire all\u2019interprete Python di sollevare un\u2019eccezione affinch\u00e9 il programma non si interrompa.<\/p>\n\n\n<p><script src=\"https:\/\/codemotion.activehosted.com\/f\/embed.php?id=42\" type=\"text\/javascript\" charset=\"utf-8\"><\/script><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Sviluppare software pu\u00f2 essere un compito difficile, specialmente per progetti &#8220;grandi&#8221;. Le aspettative sono quelle per cui premiamo un pulsante e tutto funziona bene e senza intoppi. Peccato che la realt\u00e0 sia un po\u2019 pi\u00f9 complicata di cos\u00ec\u2026 Ci\u00f2 che vogliamo dire \u00e8 che i sistemi creati con il software sono fragili, e che gli&#8230; <a class=\"more-link\" href=\"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/gestione-errori-python\/\">Read more<\/a><\/p>\n","protected":false},"author":171,"featured_media":22007,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_editorskit_title_hidden":false,"_editorskit_reading_time":0,"_editorskit_is_block_options_detached":false,"_editorskit_block_options_position":"{}","_uag_custom_page_level_css":"","_genesis_hide_title":false,"_genesis_hide_breadcrumbs":false,"_genesis_hide_singular_image":false,"_genesis_hide_footer_widgets":false,"_genesis_custom_body_class":"","_genesis_custom_post_class":"","_genesis_layout":"","footnotes":""},"categories":[10263],"tags":[10329,10442],"collections":[],"class_list":{"0":"post-23966","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-backend-it","8":"tag-framework","9":"tag-python-it","10":"entry"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.9 (Yoast SEO v26.9) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Gestione degli errori in Python: la guida semplificata<\/title>\n<meta name=\"description\" content=\"Scopri come eseguire la gestione degli errori in Python in modo facile e veloce e senza paura che il tuo programma si interrompa.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/gestione-errori-python\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"La gestione degli errori resa semplice: una introduzione in Python\" \/>\n<meta property=\"og:description\" content=\"Scopri come eseguire la gestione degli errori in Python in modo facile e veloce e senza paura che il tuo programma si interrompa.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/gestione-errori-python\/\" \/>\n<meta property=\"og:site_name\" content=\"Codemotion Magazine\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Codemotion.Italy\/\" \/>\n<meta property=\"article:published_time\" content=\"2023-10-27T07:00:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2023\/07\/Optimize-NextJS-Guide-min.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1322\" \/>\n\t<meta property=\"og:image:height\" content=\"793\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Federico Trotta\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@CodemotionIT\" \/>\n<meta name=\"twitter:site\" content=\"@CodemotionIT\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Federico Trotta\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/gestione-errori-python\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/gestione-errori-python\/\"},\"author\":{\"name\":\"Federico Trotta\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/98d2abaf70e7d106abab1f38bf20f90d\"},\"headline\":\"La gestione degli errori resa semplice: una introduzione in Python\",\"datePublished\":\"2023-10-27T07:00:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/gestione-errori-python\/\"},\"wordCount\":1531,\"publisher\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/gestione-errori-python\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2023\/07\/Optimize-NextJS-Guide-min.jpg\",\"keywords\":[\"Framework\",\"Python\"],\"articleSection\":[\"Backend\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/gestione-errori-python\/\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/gestione-errori-python\/\",\"name\":\"Gestione degli errori in Python: la guida semplificata\",\"isPartOf\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/gestione-errori-python\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/gestione-errori-python\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2023\/07\/Optimize-NextJS-Guide-min.jpg\",\"datePublished\":\"2023-10-27T07:00:00+00:00\",\"description\":\"Scopri come eseguire la gestione degli errori in Python in modo facile e veloce e senza paura che il tuo programma si interrompa.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/gestione-errori-python\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/gestione-errori-python\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/gestione-errori-python\/#primaryimage\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2023\/07\/Optimize-NextJS-Guide-min.jpg\",\"contentUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2023\/07\/Optimize-NextJS-Guide-min.jpg\",\"width\":1322,\"height\":793,\"caption\":\"How to optimize Next.JS for production. Boost performance and user experience with this guide.\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/gestione-errori-python\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.codemotion.com\/magazine\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Backend\",\"item\":\"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"La gestione degli errori resa semplice: una introduzione in Python\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#website\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/\",\"name\":\"Codemotion Magazine\",\"description\":\"We code the future. Together\",\"publisher\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.codemotion.com\/magazine\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#organization\",\"name\":\"Codemotion\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png\",\"contentUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png\",\"width\":225,\"height\":225,\"caption\":\"Codemotion\"},\"image\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/Codemotion.Italy\/\",\"https:\/\/x.com\/CodemotionIT\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/98d2abaf70e7d106abab1f38bf20f90d\",\"name\":\"Federico Trotta\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/69bc8655986054bfe43c7eaa7f00e2ea939b761bd924064ea9b5972568a01714?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/69bc8655986054bfe43c7eaa7f00e2ea939b761bd924064ea9b5972568a01714?s=96&d=mm&r=g\",\"caption\":\"Federico Trotta\"},\"description\":\"I have loved writing since I was a young boy in school, writing detective stories as class exams. Thanks to my curiosity, I discovered programming and AI. Having a burning passion for writing, I couldn't avoid starting to write about these topics, so I decided to change my career to become a Technical Writer. My purpose is to educate people on Python programming, Machine Learning, and Data Science, through writing.\",\"sameAs\":[\"https:\/\/federicotrotta.com\/\",\"https:\/\/www.linkedin.com\/in\/federico-trotta\/?originalSubdomain=it\"],\"url\":\"https:\/\/www.codemotion.com\/magazine\/author\/federico-trotta\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Gestione degli errori in Python: la guida semplificata","description":"Scopri come eseguire la gestione degli errori in Python in modo facile e veloce e senza paura che il tuo programma si interrompa.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/gestione-errori-python\/","og_locale":"en_US","og_type":"article","og_title":"La gestione degli errori resa semplice: una introduzione in Python","og_description":"Scopri come eseguire la gestione degli errori in Python in modo facile e veloce e senza paura che il tuo programma si interrompa.","og_url":"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/gestione-errori-python\/","og_site_name":"Codemotion Magazine","article_publisher":"https:\/\/www.facebook.com\/Codemotion.Italy\/","article_published_time":"2023-10-27T07:00:00+00:00","og_image":[{"width":1322,"height":793,"url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2023\/07\/Optimize-NextJS-Guide-min.jpg","type":"image\/jpeg"}],"author":"Federico Trotta","twitter_card":"summary_large_image","twitter_creator":"@CodemotionIT","twitter_site":"@CodemotionIT","twitter_misc":{"Written by":"Federico Trotta","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/gestione-errori-python\/#article","isPartOf":{"@id":"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/gestione-errori-python\/"},"author":{"name":"Federico Trotta","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/98d2abaf70e7d106abab1f38bf20f90d"},"headline":"La gestione degli errori resa semplice: una introduzione in Python","datePublished":"2023-10-27T07:00:00+00:00","mainEntityOfPage":{"@id":"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/gestione-errori-python\/"},"wordCount":1531,"publisher":{"@id":"https:\/\/www.codemotion.com\/magazine\/#organization"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/gestione-errori-python\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2023\/07\/Optimize-NextJS-Guide-min.jpg","keywords":["Framework","Python"],"articleSection":["Backend"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/gestione-errori-python\/","url":"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/gestione-errori-python\/","name":"Gestione degli errori in Python: la guida semplificata","isPartOf":{"@id":"https:\/\/www.codemotion.com\/magazine\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/gestione-errori-python\/#primaryimage"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/gestione-errori-python\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2023\/07\/Optimize-NextJS-Guide-min.jpg","datePublished":"2023-10-27T07:00:00+00:00","description":"Scopri come eseguire la gestione degli errori in Python in modo facile e veloce e senza paura che il tuo programma si interrompa.","breadcrumb":{"@id":"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/gestione-errori-python\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/gestione-errori-python\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/gestione-errori-python\/#primaryimage","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2023\/07\/Optimize-NextJS-Guide-min.jpg","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2023\/07\/Optimize-NextJS-Guide-min.jpg","width":1322,"height":793,"caption":"How to optimize Next.JS for production. Boost performance and user experience with this guide."},{"@type":"BreadcrumbList","@id":"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/gestione-errori-python\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.codemotion.com\/magazine\/"},{"@type":"ListItem","position":2,"name":"Backend","item":"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/"},{"@type":"ListItem","position":3,"name":"La gestione degli errori resa semplice: una introduzione in Python"}]},{"@type":"WebSite","@id":"https:\/\/www.codemotion.com\/magazine\/#website","url":"https:\/\/www.codemotion.com\/magazine\/","name":"Codemotion Magazine","description":"We code the future. Together","publisher":{"@id":"https:\/\/www.codemotion.com\/magazine\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.codemotion.com\/magazine\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.codemotion.com\/magazine\/#organization","name":"Codemotion","url":"https:\/\/www.codemotion.com\/magazine\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png","width":225,"height":225,"caption":"Codemotion"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Codemotion.Italy\/","https:\/\/x.com\/CodemotionIT"]},{"@type":"Person","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/98d2abaf70e7d106abab1f38bf20f90d","name":"Federico Trotta","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/69bc8655986054bfe43c7eaa7f00e2ea939b761bd924064ea9b5972568a01714?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/69bc8655986054bfe43c7eaa7f00e2ea939b761bd924064ea9b5972568a01714?s=96&d=mm&r=g","caption":"Federico Trotta"},"description":"I have loved writing since I was a young boy in school, writing detective stories as class exams. Thanks to my curiosity, I discovered programming and AI. Having a burning passion for writing, I couldn't avoid starting to write about these topics, so I decided to change my career to become a Technical Writer. My purpose is to educate people on Python programming, Machine Learning, and Data Science, through writing.","sameAs":["https:\/\/federicotrotta.com\/","https:\/\/www.linkedin.com\/in\/federico-trotta\/?originalSubdomain=it"],"url":"https:\/\/www.codemotion.com\/magazine\/author\/federico-trotta\/"}]}},"featured_image_src":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2023\/07\/Optimize-NextJS-Guide-min-600x400.jpg","featured_image_src_square":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2023\/07\/Optimize-NextJS-Guide-min-600x600.jpg","author_info":{"display_name":"Federico Trotta","author_link":"https:\/\/www.codemotion.com\/magazine\/author\/federico-trotta\/"},"uagb_featured_image_src":{"full":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2023\/07\/Optimize-NextJS-Guide-min.jpg",1322,793,false],"thumbnail":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2023\/07\/Optimize-NextJS-Guide-min-150x150.jpg",150,150,true],"medium":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2023\/07\/Optimize-NextJS-Guide-min-300x180.jpg",300,180,true],"medium_large":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2023\/07\/Optimize-NextJS-Guide-min-768x461.jpg",768,461,true],"large":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2023\/07\/Optimize-NextJS-Guide-min-1024x614.jpg",1024,614,true],"1536x1536":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2023\/07\/Optimize-NextJS-Guide-min.jpg",1322,793,false],"2048x2048":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2023\/07\/Optimize-NextJS-Guide-min.jpg",1322,793,false],"small-home-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2023\/07\/Optimize-NextJS-Guide-min.jpg",100,60,false],"sidebar-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2023\/07\/Optimize-NextJS-Guide-min-180x128.jpg",180,128,true],"genesis-singular-images":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2023\/07\/Optimize-NextJS-Guide-min-896x504.jpg",896,504,true],"archive-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2023\/07\/Optimize-NextJS-Guide-min-400x225.jpg",400,225,true],"gb-block-post-grid-landscape":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2023\/07\/Optimize-NextJS-Guide-min-600x400.jpg",600,400,true],"gb-block-post-grid-square":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2023\/07\/Optimize-NextJS-Guide-min-600x600.jpg",600,600,true]},"uagb_author_info":{"display_name":"Federico Trotta","author_link":"https:\/\/www.codemotion.com\/magazine\/author\/federico-trotta\/"},"uagb_comment_info":0,"uagb_excerpt":"Sviluppare software pu\u00f2 essere un compito difficile, specialmente per progetti &#8220;grandi&#8221;. Le aspettative sono quelle per cui premiamo un pulsante e tutto funziona bene e senza intoppi. Peccato che la realt\u00e0 sia un po\u2019 pi\u00f9 complicata di cos\u00ec\u2026 Ci\u00f2 che vogliamo dire \u00e8 che i sistemi creati con il software sono fragili, e che gli&#8230;&hellip;","lang":"it","_links":{"self":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/23966","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/users\/171"}],"replies":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/comments?post=23966"}],"version-history":[{"count":3,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/23966\/revisions"}],"predecessor-version":[{"id":23971,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/23966\/revisions\/23971"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/media\/22007"}],"wp:attachment":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/media?parent=23966"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/categories?post=23966"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/tags?post=23966"},{"taxonomy":"collections","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/collections?post=23966"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}