Python - Excepciones propias para la clase Circulo

 
Vista:
Imágen de perfil de GABRIELA

Excepciones propias para la clase Circulo

Publicado por GABRIELA (1 intervención) el 12/11/2022 00:30:00
Estoy haciendo un ejercicio muy simple con la clase Circulo y pide lo siguiente:

Si se instancia la clase con radio <= 0 mostrar una excepción indicando un error amigable al
usuario e impidiendo la instanciación y permitir la multiplicacion por numeros distintos de 0 a la clase Circulo.

Nunca maneje excepciones en objetos entiendo que tengo que crear una clase que herede de Exception, para este tipo de error que mas que nada es semantico.

CLARAMENTE NO FUNCIONA.
Por favor alguien que me explique como se pasan los parametros en la clase NoCero

Mi codigo:

from math import pi
class Circulo():

def __init__(self,radio,num):
self.radio=radio
self.num=num

def area(self):

return (pi * pow(self.radio,2))*self.num

def perimetro(self):

return (pi *(2*self.radio))*self.num


c=Circulo(1,5)
PROBANDO UN IF
"""
if c.radio > 0 and c.num > 0:

print(f"El area del circulo es:{c.area():.2f} cm\xb2.")
print(f"El perimetro del circulo es:{c.perimetro():.2f}")
else:
print("se produjo un error")"""

class NoCero(Exception):
def __init__(self, radio, num):

super().__init__("La instancia de circulo no puede ser 0".format(radio,num))
self.radio=radio
self.num=num
raise NoCero(0,0)
try:
raise NoCero(0,0)
except NoCero as e:
print("No se puede permitir ni area ni perimetro 0")


Gracias, desde ya!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 2.808
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Excepciones propias para la clase Circulo

Publicado por tincopasan (1082 intervenciones) el 12/11/2022 11:35:48
Sin lugar a dudas hay muchas formas de resolver esto, en lo personal creo que lo estás complicando.
las excepciones no son sobre la clase en sí, sino sobre los valores que le pasas a la clase.
Entonces una forma simple sería:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#-*- coding: utf  -8 -*-
from math import pi
class NoCero(Exception):
    def __init__(self):
        pass
     # no necesito nada de esta clase ahora, salvo invocarla
 
class Circulo():
    def __init__(self,radio,num):
        self.radio=radio
        self.num=num
 
    def area(self):
        return (pi * pow(self.radio,2))*self.num
 
    def perimetro(self):
        return (pi *(2*self.radio))*self.num
 
#esto es exactamente igual
 
try:
    radio = int(input("Ingrese el radio: "))
    if radio <= 0:
        raise NoCero()
        #acá verfico el valor a pasar y el llamado a la clase de "valor no cero"
    print(f"El radio es: {radio}")
    num = int(input("Ingrese un número: "))
    if num <= 0:
        raise NoCero()
    print(f"El número es: {num}")
    # Si ambos valores son enteros y mayores que cero instancio a la clase Circulo
    c=Circulo(radio, num)
    print(f"El area del circulo es: {c.area():.2f} cm\xb2.")
    print(f"El perimetro del circulo es: {c.perimetro():.2f}")
 
 
except NoCero as e:
    print("No puede ser 0 o un valor negativo")
    #el error por la clase
except ValueError:
    print("No ingreso un valor entero")
    #error por tipos

No sé si te servirá, pero espero te oriente, lo que pasa que ya depende de la lógica que cada uno use.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar