Soy decentemente nuevo en Python, y tengo una pregunta sobre la implementación de cierta metodología de excepción. Este es el código (acortado):

class OurException(Exception):
    """User defined Exception"""
....

def get_single_value(command: str, connect_string: str, logger: Logger = None, custom_exception: Exception = OurException) -> Tuple[int, str]:
....
    raise custom_exception("Errors in script\n\nexit .....")

El parámetro de excepción que configuré de manera predeterminada OurException no se puede generar de esta manera. Sin embargo, cuando cambio el custom_exception en la última línea a Exception o OurException, el problema desaparece.

En un contexto de OOP, diría que, como he definido el parámetro para que sea una Excepción, y una Excepción se puede llamar de esa manera, se garantiza que funcione. Sin embargo, mi intérprete de Python e IDE no están de acuerdo (Pycharm, Python 3.7).

Algo no funciona de la manera que creo que funciona, y me interesa saber qué es eso.

0
0xCAFEBABE 30 sep. 2019 a las 17:32

1 respuesta

La mejor respuesta

Si se supone que custom_exception es una subclase de Exception, debe usar la sugerencia de tipo Type[Exception], no Exception en sí. De lo contrario, la sugerencia de tipo especifica que se espera una instancia de Exception, y en general una instancia de Exception es no invocable.

from typing import Type


def get_single_value(command: str,
                     connect_string: str,
                     logger: Logger = None,
                     custom_exception: Type[Exception] = OurException) -> Tuple[int, str]:
    ....
    raise custom_exception("Errors in script\n\nexit .....")
6
chepner 30 sep. 2019 a las 14:44