• Benvenuti su RaspberryItaly!
Benvenuto ospite! Login Login con Facebook Registrati Login with Facebook


Valutazione discussione:
  • 0 voto(i) - 0 media
  • 1
  • 2
  • 3
  • 4
  • 5

[-]
Tags
in gestione python errore

Gestione errore in Python
#1
Ri-buongiorno a tutti.


Ho questa istruzione:
Codice:
rtcinttime=(ds3231.read_datetime())

che funziona perfettamente......
io vorrei intercettare l'errore che produce quando il modulo del RTC non funziona (io scollego l'alimentazione per simulare tale evento).
il type dice che è un variabile <datetime.datetime>
Il problema è che quando nasce il problema si blocca il programma e io non posso gestire l'errore (fare comparire una scritta o altro)


Questo è l'errore che produce:
Codice:
OSError : [Errno 121] Remote I/O error

Immagino che sia una banalità ma cercando in giro non ho trovato nessun esempio in merito.

Grazie.
Risposta
#2
non ho capito se hai usato una gestione degli errori son try...except e questo non viene rilevato, o se non hai messo nessuna gestione degli errori..
Risposta
#3
(24/04/2020, 23:50)Zzed Ha scritto: non ho capito se hai usato una gestione degli errori son try...except e questo non viene rilevato, o se non hai messo nessuna gestione degli errori..

Ciao Zzed,
   no, non sto usando "try... except", sto usando "while True:".

Se la tua risposta è (scusa la mia ignoranza) che per gestire gli errori si deve usare "try.... except" dimmi per favore cosa scrivere in except per intrappolare l'errore che ho esposto nel mio post.


Grazie

Cercherò di essere più preciso (ho tolto quello che credo non serva per il problema):
Codice:
import sys
import os
picdir = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'pic')
libdir = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'lib')
if os.path.exists(libdir):
   sys.path.append(libdir)
import datetime
import SDL_DS3231
import logging
from waveshare_epd import epd2in9
import time
from PIL import Image,ImageDraw,ImageFont
import traceback

ds3231 = SDL_DS3231.SDL_DS3231(1, 0x68)
ds3231.write_now()

try:
   epd = epd2in9.EPD()
   epd.init(epd.lut_full_update)


   font1 = ImageFont.truetype(os.path.join(picdir, 'Font.ttc'), 22)
   font2 = ImageFont.truetype(os.path.join(picdir, 'Font.ttc'), 14)
   font3 = ImageFont.truetype(os.path.join(picdir, 'Font.ttc'), 10)
   font4 = ImageFont.truetype(os.path.join(picdir, 'Font.ttc'), 8)

   Himage = Image.new('1', (epd.height, epd.width), 255)  # 255: clear the frame
   bmp = Image.open(os.path.join(picdir, 'QR-cis1.png'))
   Himage.paste(bmp, (206,20))
   draw = ImageDraw.Draw(Himage)
   rasptime=time.strftime("%H:%M:%S")

[b]   rtcinttime=(ds3231.read_datetime())[/b]

   rtctime=str(rtcinttime)
   print(rtcinttime, type(rtcinttime))
   print(rtctime, type(rtctime))
   rtctime=rtctime[11:19]
   FMT = '%H:%M:%S'
   tdelta = datetime.datetime.strptime(rasptime, FMT) - datetime.datetime.strptime(rtctime, FMT)
   draw.text((10, 76), 'delta Server time/RTC', font = font2, fill = 0)
   draw.text((155, 76), str(tdelta)+" ", font = font2, fill = 0)
    epd.display(epd.getbuffer(Himage))
   epd.sleep()
   time.sleep(600)     # 1 hour
except:
   print ("Errore.....")
Però come risultato il programma si interompe, stampa degli errori ma non messaggio di errore intrapolato "Errore...."
Ho evidenziato in grasseto l'istruzione che genera l'errore quando tolgo l'alimentazione al modulo RTC.

Grazie
Risposta
#4
Scusa, da mobile non vedo il grassetto e fatico a vedere il listato.
Però si, per la gestione degli errori, in Python, si usa try except.
Tipo;
Codice:
try:
   Istruzione che potrebbe generare un errore
  ...
  ...
except:
   print ("c'è stato un errore")
Se il blocco di istruzioni contenuto da try non va a buon fine, viene eseguito except, o solo continuato il programma se ci metti solo un pass.
qui istruzioni dettagliate sulla gestione delle eccezioni in Python

Inviato dal mio Redmi Note 8 utilizzando Tapatalk
Risposta
#5
ed è quello che ho fatto, vedi il finale di istruzione nell'allegato disp3a
poi vedi l'errore nella shell dell'interprete (allegato disp3b) ed infine la seconda parte dell'errore fornita dall'interprete (allegato disp3c). Ovviamente questo quando ho tolto l'alimentazione del modulo RTC altrimenti l'errore non sarebbe venuto fuori. Mi aspettavo che stampasse il messaggio "Error..... RTC".



(25/04/2020, 17:48)Zzed Ha scritto: Scusa, da mobile non vedo il grassetto e fatico a vedere il listato.
Però si, per la gestione degli errori, in Python, si usa try except.
Tipo;
Codice:
try:
  Istruzione che potrebbe generare un errore
 ...
 ...
except:
  print ("c'è stato un errore")
Se il blocco di istruzioni contenuto da try non va a buon fine, viene eseguito except, o solo continuato il programma se ci metti solo un pass.
qui istruzioni dettagliate sulla gestione delle eccezioni in Python

Inviato dal mio Redmi Note 8 utilizzando Tapatalk


Allegati Anteprime
           
Risposta
#6
Quello lo hai fatto si. Ma quello che non hai fatto, come ti ha consigliato Zzed, è leggere la pagina che ti ha linkato.
Se lo avessi fatto non avresti dubbi su come descrivere l'errore sul tuo print().
Python è un linguaggio di programmazione e come qualsiasi linguaggio và studiato. Non esiste la bacchetta magica "python".......

Mandi

Barbezuan
Risposta
#7
Ok Barbezuan, pensavo di averlo fatto ma evidentemente non l'ho fatto con la dovuta attenzione. Ristudiero.
Mandi
Risposta
#8
Ok, risolto.
Mi è bastato chiedere a gente con buona volontà.

Sono daccordo sul fatto che se vuoi diventare un buon programmatore deve studiare ma io volevo restare un appassionato e pure scarso....... in fin dei conti se volevo questi consigli andavo in biblioteca.

Grazie
Risposta
#9
Caro "ragazzo", se il tuo intento era questo la tua richiesta avrebbe dovuto essere:
"Ho questo problema, non so' risolverlo e non mi interessa risolverlo da me. C'è qualcuno disposto a farmelo?"
Sicuramente avresti avuto risposte più utili....

Mandi

Barbezuan
Risposta
#10
Siamo contenti tu abbia risolto, ma un forum non è una assistenza tecnica tipo domanda = risposta, è condivisione e discussione, e ha tempi più lunghi (ma per questo riesce a essere molto più approfondito) di altri sistemi.

Inviato dal mio Redmi Note 8 utilizzando Tapatalk
Risposta
  


Vai al forum:


Navigazione: 2 Ospite(i)
Forum con nuovi Post
Forum senza nuovi post
Forum bloccato
Forum Redirect