Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 什么';重新发布自定义异常的正确方法是什么?_Python_Python 3.x - Fatal编程技术网

Python 什么';重新发布自定义异常的正确方法是什么?

Python 什么';重新发布自定义异常的正确方法是什么?,python,python-3.x,Python,Python 3.x,如果我有这个功能 def parse_datetime(s, **kwargs): """ Converts a time-string into a valid :py:class:`~datetime.datetime.DateTime` object. Args: s (str): string to be formatted. ``**kwargs`` is passed directly to :func:`.

如果我有这个功能

def parse_datetime(s, **kwargs):
    """ Converts a time-string into a valid
    :py:class:`~datetime.datetime.DateTime` object.

        Args:
            s (str): string to be formatted.

        ``**kwargs`` is passed directly to :func:`.dateutil_parser`.

        Returns:
            :py:class:`~datetime.datetime.DateTime`
    """
    if not s:
        return None
    try:
        ret = dateutil_parser(s, **kwargs)
    except (OverflowError, TypeError, ValueError) as e:
        logger.exception(e, exc_info=True)
        raise SyncthingError(*e.args)
    return ret

将捕获的异常作为公共库异常引发的最正确方法是什么?(
SyncthingError(Exception)
)它现在的编写方式无法正常工作

只要公共库异常的构造函数出现错误或异常,您就应该能够引发它。例如:

Class LibraryException(Exception)...
Class LibraryException(Error)...

在Python 3中,可以链接异常

raise SyncthingError("parsing error") from e
将生成包含原始异常详细信息的堆栈跟踪


文档中有一些示例。

如果您想提高
SyncthingError
,只需执行:
raisesyncthingerror(e)
。如果您想引发捕获的异常,只需执行
raise
即可。您能试试吗?是否有Python2回退?这非常优雅。@blakev在Python2中有一个兼容层实现,这没有多大作用,但它可以防止
SyntaxError
。还有值得研究的
reraise()
函数。@blakev我已经从第3版开始学习Python。我不得不搜索并发现:与你的问题非常相似。