Foros del Web » Programando para Internet » Python »

Manejo de excepciones

Estas en el tema de Manejo de excepciones en el foro de Python en Foros del Web. Tengo el siguiente código: Código: while True: y0 = 0 funcion = 0 paso = 0 while True: if y0 or funcion or paso == ...
  #1 (permalink)  
Antiguo 23/08/2011, 17:03
 
Fecha de Ingreso: julio-2011
Mensajes: 62
Antigüedad: 13 años, 4 meses
Puntos: 0
Pregunta Manejo de excepciones

Tengo el siguiente código:
Código:
while True:
    y0 = 0
    funcion = 0
    paso = 0
    while True:
        if y0 or funcion or paso == 'salir':
            break
        else:
            try:
                y0 = int(input('y0 = '))
                y = y0
                funcion = input('Función = ')
                paso = float(input('paso = '))
                iteraciones = int (1/paso)
                valor_actual = y0 + ( paso * funcion )
                for i in range (iteraciones):
                    valor_actual = valor_actual + ( paso * (- valor_actual ) )
                    print 'y'+str(i+1)+' '+'='+' '+str(valor_actual)
            except NameError:
                print 'Error no es válido'
            except ZeroDivisionError:
                print 'Error division entre 0'
Tecleando 'salir' deberia de terminar el programa pero muestra 'Error no es válido'.
Tambien como hago para que imprima en pantalla cada 100 valores,probe con range(0,iteraciones,100),ejemplo:
y0 = 1
Funcion = -y
paso = 0.001
  #2 (permalink)  
Antiguo 23/08/2011, 22:23
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 9 meses
Puntos: 1360
Respuesta: Manejo de excepciones

No se exactamente que es lo que quieres hacer con tu programa, pero tienes varios errores.

Por ejemplo por nada del mundo se debe de usar input en versiones de python 2.x

Si nos dices que quieres hacer y tratas de mejorar tu código, te podemos ayudar.

Pero si no sabemos que tratas de hacer y como lo estas tratando de hacer no esta claro e involucra malas practicas entonces no podemos ayudarte mucho.
  #3 (permalink)  
Antiguo 24/08/2011, 07:47
 
Fecha de Ingreso: octubre-2009
Ubicación: En el ordenador
Mensajes: 504
Antigüedad: 15 años, 2 meses
Puntos: 10
Respuesta: Manejo de excepciones

Cita:
Iniciado por Bael_Balzac Ver Mensaje
Tengo el siguiente código:
Código:
while True:
    y0 = 0
    funcion = 0
    paso = 0
    while True:
        if y0 or funcion or paso == 'salir':
            break
        else:
            try:
                y0 = int(input('y0 = '))
                y = y0
                funcion = input('Función = ')
                paso = float(input('paso = '))
                iteraciones = int (1/paso)
                valor_actual = y0 + ( paso * funcion )
                for i in range (iteraciones):
                    valor_actual = valor_actual + ( paso * (- valor_actual ) )
                    print 'y'+str(i+1)+' '+'='+' '+str(valor_actual)
            except NameError:
                print 'Error no es válido'
            except ZeroDivisionError:
                print 'Error division entre 0'
Tecleando 'salir' deberia de terminar el programa pero muestra 'Error no es válido'.
Tambien como hago para que imprima en pantalla cada 100 valores,probe con range(0,iteraciones,100),ejemplo:
y0 = 1
Funcion = -y
paso = 0.001
Hay muchos fallos en este código:

  • Deberías usar raw_input, ya que con input, te pueden inyectar código
  • Si estas entrando los diferentes datos como float y como int, no podrás escribir "salir", no te lo va a aceptar
  • En el if de arriba, debería ser: if y0 == 'salir' or funcion == 'salir' or paso == 'salir'
  • Posiblemente (a mi me ocurre) en Función, en el input, te dará un error por el acento
  • Aparte de todo eso, no entiendo la finalidad del código
Saludos!
__________________
Buscando ideas para proyectos....

Esperando a tener 18 años....
  #4 (permalink)  
Antiguo 24/08/2011, 08:14
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Manejo de excepciones

Sería bastante más fácil si eliminaras esos bloques except y dejaras que la excepción te dijera cuál es el error exacto.

Además de todo lo ya escrito, esto choca un poco:
Código Python:
Ver original
  1. while True:
  2.         if y0 or funcion or paso == 'salir':
  3.             break
  4.         else
es exactamente lo mismo que
Código Python:
Ver original
  1. while not (y0 or funcion or paso == 'salir'):
  2.         ....
  #5 (permalink)  
Antiguo 24/08/2011, 10:43
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 9 meses
Puntos: 1360
Respuesta: Manejo de excepciones

Ayer me quede pensando si tu programa era un programa para integrar. Si es así aqui te dejo un pequeño código:
Código Python:
Ver original
  1. def f(x):
  2.     return x * x
  3.  
  4. a = raw_input('Inferior: ')
  5. b = raw_input('Superior: ')
  6. delta = raw_input('Delta: ') #Entre mas pequeno es mas preciso
  7.  
  8. a = int(a)
  9. b = int(b)
  10. delta = float(delta)
  11.  
  12. if a > b:
  13.     a, b = b, a
  14.  
  15. i = a
  16. res = 0
  17. while i <= b:
  18.     res += delta * f(i)
  19.     i += delta
  20.    
  21. print "El resultado de integrar de %d a %d es: %f" % (a, b, res)
  #6 (permalink)  
Antiguo 24/08/2011, 11:03
 
Fecha de Ingreso: julio-2011
Mensajes: 62
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: Manejo de excepciones

El código es para resolver una ecuacion diferencial por el método de Euler,lo que quiero hacer es que al ejecutarse el programa reconozca los errores y que al teclear 'salir' el programa termine.
  #7 (permalink)  
Antiguo 24/08/2011, 12:37
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Manejo de excepciones

Cita:
Iniciado por Bael_Balzac Ver Mensaje
el programa reconozca los errores
Entonces tendrás que validar. Por ejemplo, que paso sea menor que 1.
Tampoco es posible escribir una función así como así y que sea reconocida. Deberías usar eval y utilizar sintaxis de python correcta, por ejemplo: cuando te pide la función, entrar

lambda x: -x

para hacer "y = -x"

Te recomiendo que evites esto y definas la función en código, en vez de pedirla al usuario. Quizás puedas presentar las opciones y pedir un nombre de función, para después seleccionarlo de un diccionario.

También tendrás que manejar la excepción que ocurre si intentás convertir a entero una cadena que no es convertible.

Cita:
Iniciado por Bael_Balzac Ver Mensaje
y que al teclear 'salir' el programa termine.
Entonces deberías preguntárselo al usuario, ¿no? Podrías preguntar al usuario luego de la ejecución del código, y tener en la condición de tu while algo como
Código Python:
Ver original
  1. while continuar:
  2.     ....
  3.     continuar = input('¿continuar?') != 'no'


Saludos.

Etiquetas: excepciones, manejo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:29.