User Defined Exceptions

pcapkit.utilities.exceptions refined built-in exceptions. Make it possible to show only user error stack information [*], when exception raised on user’s operation.

Loud and Quiet Errors

Raising a BaseError is, by default, a loud act: the error is logged once at logging.CRITICAL on the logger logger, and outside development mode sys.tracebacklimit is set to 0, which suppresses the traceback frames entirely so the user sees the exception line rather than a walk through pcapkit’s internals.

quiet=True marks an error that pcapkit raises as internal control flow and expects to catch itself – the MissingKeyError behind MultiDict.get is the archetype. Such an error emits nothing on any channel and touches no process-global state. It is still an ordinary exception carrying its message, so except clauses and repr() are unaffected.

Attention

Up to and including v1.4.1, quiet=True meant “log at ERROR instead of CRITICAL” rather than “do not log”, and sys.tracebacklimit was set on both paths. A single MultiDict.get() miss therefore produced an ERROR record – one per frame when parsing a capture containing unfragmented IPv6 with reassembly enabled – and truncated the tracebacks of unrelated exceptions for the remainder of the process. A consumer who was watching for those ERROR records will no longer see them; they never corresponded to a fault. Anything that genuinely wants to observe internal lookup misses should catch the exception rather than read the log.

exception pcapkit.utilities.exceptions.BaseError(*args, quiet=False, **kwargs)[source]

Bases: Exception

Base error class of all kinds.

A loud error – the default – is reported once, at logging.CRITICAL level, on the logger logger. Outside development mode it also sets sys.tracebacklimit to 0, which suppresses the traceback frames entirely, so a user sees the exception line rather than a walk through pcapkit’s internals.

A quiet error (quiet=True) is one pcapkit raises as internal control flow and expects to catch itself, such as the MissingKeyError behind MultiDict.get. It is therefore silent and free of side effects: nothing is logged, and sys.tracebacklimit is left alone. It is still a perfectly ordinary exception, carrying its message for whoever catches it.

Important

  • sys.tracebacklimit is process-global, so it is only set for a loud error – a quiet one used as control flow must not truncate the tracebacks of unrelated exceptions for the rest of the process.

  • The stacklevel of the log record is the relative level stacklevel() computes, so the record is attributed to the caller whose operation failed rather than to this module. It used to be negated, which logging.Logger.findCaller() reads as “do not walk out at all” and which therefore blamed logging itself for every error pcapkit raised.

Parameters:
  • quiet – If True, the error is neither logged nor allowed to alter sys.tracebacklimit; it is raised silently, as internal control flow.

  • *args – Arbitrary positional arguments.

  • **kwargs – Arbitrary keyword arguments.

TypeError Category

exception pcapkit.utilities.exceptions.DigitError(*args, quiet=False, **kwargs)[source]

Bases: BaseError, TypeError

The argument(s) must be (a) number(s).

exception pcapkit.utilities.exceptions.IntError(*args, quiet=False, **kwargs)[source]

Bases: BaseError, TypeError

The argument(s) must be integral.

exception pcapkit.utilities.exceptions.RealError(*args, quiet=False, **kwargs)[source]

Bases: BaseError, TypeError

The function is not defined for real number.

exception pcapkit.utilities.exceptions.ComplexError(*args, quiet=False, **kwargs)[source]

Bases: BaseError, TypeError

The function is not defined for complex instance.

exception pcapkit.utilities.exceptions.BoolError(*args, quiet=False, **kwargs)[source]

Bases: BaseError, TypeError

The argument(s) must be bool type.

exception pcapkit.utilities.exceptions.BytesError(*args, quiet=False, **kwargs)[source]

Bases: BaseError, TypeError

The argument(s) must be bytes type.

exception pcapkit.utilities.exceptions.StringError(*args, quiet=False, **kwargs)[source]

Bases: BaseError, TypeError

The argument(s) must be str type.

exception pcapkit.utilities.exceptions.BytearrayError(*args, quiet=False, **kwargs)[source]

Bases: BaseError, TypeError

The argument(s) must be bytearray type.

exception pcapkit.utilities.exceptions.DictError(*args, quiet=False, **kwargs)[source]

Bases: BaseError, TypeError

The argument(s) must be dict type.

exception pcapkit.utilities.exceptions.ListError(*args, quiet=False, **kwargs)[source]

Bases: BaseError, TypeError

The argument(s) must be list type.

exception pcapkit.utilities.exceptions.TupleError(*args, quiet=False, **kwargs)[source]

Bases: BaseError, TypeError

The argument(s) must be tuple type.

exception pcapkit.utilities.exceptions.IterableError(*args, quiet=False, **kwargs)[source]

Bases: BaseError, TypeError

The argument(s) must be iterable.

exception pcapkit.utilities.exceptions.IOObjError(*args, quiet=False, **kwargs)[source]

Bases: BaseError, TypeError

The argument(s) must be file-like object.

exception pcapkit.utilities.exceptions.ProtocolUnbound(*args, quiet=False, **kwargs)[source]

Bases: BaseError, TypeError

Protocol slice unbound.

exception pcapkit.utilities.exceptions.CallableError(*args, quiet=False, **kwargs)[source]

Bases: BaseError, TypeError

The argument(s) must be callable.

exception pcapkit.utilities.exceptions.InfoError(*args, quiet=False, **kwargs)[source]

Bases: BaseError, TypeError

The argument(s) must be Info instance.

exception pcapkit.utilities.exceptions.IPError(*args, quiet=False, **kwargs)[source]

Bases: BaseError, TypeError

The argument(s) must be IP address.

exception pcapkit.utilities.exceptions.EnumError(*args, quiet=False, **kwargs)[source]

Bases: BaseError, TypeError

The argument(s) must be enumeration protocol type.

exception pcapkit.utilities.exceptions.ComparisonError(*args, quiet=False, **kwargs)[source]

Bases: BaseError, TypeError

Rich comparison not supported between instances.

exception pcapkit.utilities.exceptions.RegistryError(*args, quiet=False, **kwargs)[source]

Bases: BaseError, TypeError

The argument(s) must be registry type.

exception pcapkit.utilities.exceptions.FieldError(*args, quiet=False, **kwargs)[source]

Bases: BaseError, TypeError

The argument(s) must be field type.

AttributeError Category

exception pcapkit.utilities.exceptions.FormatError(*args, quiet=False, **kwargs)[source]

Bases: BaseError, AttributeError

Unknown format(s).

exception pcapkit.utilities.exceptions.UnsupportedCall(*args, quiet=False, **kwargs)[source]

Bases: BaseError, AttributeError

Unsupported function or property call.

IOError Category

exception pcapkit.utilities.exceptions.FileError(*args, quiet=False, **kwargs)[source]

Bases: BaseError, OSError

[Errno 5] Wrong file format.

FileExistsError Category

exception pcapkit.utilities.exceptions.FileExists(*args, quiet=False, **kwargs)[source]

Bases: BaseError, FileExistsError

[Errno 17] File already exists.

FileNotFoundError Category

exception pcapkit.utilities.exceptions.FileNotFound(*args, quiet=False, **kwargs)[source]

Bases: BaseError, FileNotFoundError

[Errno 2] File not found.

IndexError Category

exception pcapkit.utilities.exceptions.ProtocolNotFound(*args, quiet=False, **kwargs)[source]

Bases: BaseError, IndexError

Protocol not found in ProtoChain.

ValueError Category

exception pcapkit.utilities.exceptions.VersionError(*args, quiet=False, **kwargs)[source]

Bases: BaseError, ValueError

Unknown IP version.

exception pcapkit.utilities.exceptions.IndexNotFound(*args, quiet=False, **kwargs)[source]

Bases: BaseError, ValueError

Protocol not in ProtoChain.

exception pcapkit.utilities.exceptions.ProtocolError(*args, quiet=False, **kwargs)[source]

Bases: BaseError, ValueError

Invalid protocol format.

exception pcapkit.utilities.exceptions.EndianError(*args, quiet=False, **kwargs)[source]

Bases: BaseError, ValueError

Invalid endian (byte order).

exception pcapkit.utilities.exceptions.KeyExists(*args, quiet=False, **kwargs)[source]

Bases: BaseError, ValueError

Key already exists.

exception pcapkit.utilities.exceptions.NoDefaultValue(*args, quiet=False, **kwargs)[source]

Bases: BaseError, ValueError

No default value.

exception pcapkit.utilities.exceptions.FieldValueError(*args, quiet=False, **kwargs)[source]

Bases: BaseError, ValueError

Invalid field value.

exception pcapkit.utilities.exceptions.SchemaError(*args, quiet=False, **kwargs)[source]

Bases: BaseError, ValueError

Invalid schema.

exception pcapkit.utilities.exceptions.SeekError(*args, quiet=False, **kwargs)[source]

Bases: BaseError, ValueError

Invalid seek position.

exception pcapkit.utilities.exceptions.TruncateError(*args, quiet=False, **kwargs)[source]

Bases: BaseError, ValueError

Invalid truncate size.

exception pcapkit.utilities.exceptions.VendorPathNotFound(*args, quiet=False, **kwargs)[source]

Bases: BaseError, ValueError

Crawler module is not inside the vendor package root.

NotImplementedError Category

exception pcapkit.utilities.exceptions.ProtocolNotImplemented(*args, quiet=False, **kwargs)[source]

Bases: BaseError, NotImplementedError

Protocol not implemented.

exception pcapkit.utilities.exceptions.VendorNotImplemented(*args, quiet=False, **kwargs)[source]

Bases: BaseError, NotImplementedError

Vendor not implemented.

struct.error Category

exception pcapkit.utilities.exceptions.StructError(*args, eof=False, **kwargs)[source]

Bases: BaseError, error

Unpack failed.

EOFError Category

exception pcapkit.utilities.exceptions.StreamEOFError(*args, quiet=False, **kwargs)[source]

Bases: BaseError, EOFError

Underlying stream exhausted; no data left to read.

Raised by prepare() when the length of a schema’s read was derived by measuring what is actually left in the stream – rather than declared by the caller – and that measurement came back zero. This is the frame reader’s “no more packets” signal, so it subclasses EOFError rather than replacing it: existing except (EOFError, StopIteration) handlers keep working unchanged, and a caller that wants to be more specific can catch this instead.

A declared zero length – a nested schema legitimately sized to have nothing to read – is a different situation and does not raise this.

Note

prepare() always raises this with quiet=True: reaching end of stream is the frame reader’s ordinary way of finding out there is nothing left to parse, not a fault to log – the same convention StructError follows for the same situation via its own eof=True.

KeyError Category

exception pcapkit.utilities.exceptions.MissingKeyError(*args, quiet=False, **kwargs)[source]

Bases: BaseError, KeyError

Key not found.

exception pcapkit.utilities.exceptions.FragmentError(*args, quiet=False, **kwargs)[source]

Bases: BaseError, KeyError

Invalid fragment dict.

exception pcapkit.utilities.exceptions.PacketError(*args, quiet=False, **kwargs)[source]

Bases: BaseError, KeyError

Invalid packet dict.

ModuleNotFoundError Category

exception pcapkit.utilities.exceptions.ModuleNotFound(*args, quiet=False, **kwargs)[source]

Bases: BaseError, ModuleNotFoundError

Module not found.

io.UnsupportedOperation Category

exception pcapkit.utilities.exceptions.UnsupportedOperation(*args, quiet=False, **kwargs)[source]

Bases: BaseError, UnsupportedOperation

Unsupported operation.

Footnotes