关于python:重新定义自定义异常的正确方法是什么?

What's the proper way to reraise a custom exception?

如果我有这个功能,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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))现在它的编写方式无法正常工作。


在Python 3中,异常可以链接,

1
raise SyncthingError("parsing error") from e

将生成一个堆栈跟踪,其中包含原始异常的详细信息。

raise语句中有一些例子。


只要公共库异常的构造使用Error或Exception,您就应该能够引发它。 例如:

1
2
Class LibraryException(Exception)...
Class LibraryException(Error)...