¿Qué hacer con las funciones que son numéricamente válidas, pero físicamente fuera de rango?

La razón, me gustaría que mi programa me dijera y se detuviera, si se deja el rango físicamente correcto.

Pensé en usar la excepción ValueError para este manejo de errores.

Ejemplo:

def return_approximation(T):
  #return T only if it is inbetween 0 < T < 100
  return T
1
marou 14 ene. 2017 a las 14:30

3 respuestas

La mejor respuesta

Python tiene la declaración assert para este tipo de restricciones de argumentos.

def return_approximation(T):
    assert 0 < T < 100, "Argument 'T' out of range"
    return T
5
mkiever 14 ene. 2017 a las 11:38

Simplemente puede restringir el valor devuelto a T si coincide con sus condiciones más return None, así:

>>> def f(T):
        return T if 0 < T < 100 else None

>>> f(100)
>>> f(99)
99
>>> f(0)
>>> f(1)
1

EDITAR: solución con excepciones:

>>> def f(T):
        if 0 < T < 100:
            return T
        else:
            raise ValueError


>>> f(100)
Traceback (most recent call last):
  File "<pyshell#475>", line 1, in <module>
    f(100)
  File "<pyshell#474>", line 5, in f
    raise ValueError
ValueError
>>> f(99)
99
>>> f(0)
Traceback (most recent call last):
  File "<pyshell#477>", line 1, in <module>
    f(0)
  File "<pyshell#474>", line 5, in f
    raise ValueError
ValueError
>>> f(1)
1

Incluso puede enviar su propio mensaje para mayor claridad:

>>> def f(T):
        if 0 < T < 100:
            return T
        else:
            raise Exception('T is out of Range')

>>> f(100)
Traceback (most recent call last):
  File "<pyshell#484>", line 1, in <module>
    f(100)
  File "<pyshell#483>", line 5, in f
    raise Exception('T is out of Range')
Exception: T is out of Range
0
Iron Fist 14 ene. 2017 a las 12:34

No estoy segura de lo que quieres decir con physically.

En términos generales, si el error fuera de rango es causado por datos externos, se supone que debe generar una excepción; Si el error proviene de sus propios datos, puede usar assert para cancelar la ejecución actual.

0
hpwsue 14 ene. 2017 a las 11:41