我是Python的新手,我对某种异常方法的实现有疑问。这是代码(缩短了):
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 .....")
我默认设置为OurException的异常参数无法通过这种方式引发。但是,当我将最后一行的custom_exception
更改为Exception
或OurException
时,问题消失了。
在OOP上下文中,我想说的是,由于我已将参数定义为Exception,并且以这种方式可以调用Exception,因此可以保证它可以正常工作。但是,我的python解释器和IDE不一致(Pycharm,Python 3.7)。
有些事情没有按照我认为的那样工作,我对此很感兴趣。
答案 0 :(得分:5)
如果假设custom_exception
是Exception
的子类,则需要使用类型提示Type[Exception]
,而不是Exception
本身。否则,类型提示将指定期望Exception
的实例,并且一般来说Exception
的实例是不可可调用的。
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 .....")