[Python 3] Cum as putea face ca sys.exit(1) sa cheme la randul ei ValueError, cand insasi sys.exit(1) a fost chemata de catre ValueError?

Pattern-ul asta e super-dubios. In principiu exceptiile le folosesti pentru non-local control flows. Mai pe romaneste, ai ajuns intr-un punct al programului si ai o situatie exceptionala (data.timp < 0). Si nici nu prea ai ce sa faci acolo ca sa o rezolvi (eg - sa-i ceri user-ului un al timp). Asa ca faci un raise ValueError si lasi o alta bucata de cod, undeva intr-un loc mult mai high-level sa se ocupe de ea.

Cum as rescrie ce e mai sus:

def validate(data):
    if data.timp < 0:            
        raise ValueError(f"Timpul are o valoare negativa: {data.timp}. Te rog introdu o valoare pozitiva")

...
# in main
def main():
   #your codes here
  try:
     validate(parsed_data)
  except ValueError as e:
     print(f"Some invalid data -- {e}")
     sys.exit(1)
  # rest of code which now knows parsed_data is OK
1 Like