From c22cc30e71c65384e7d237e8d012d3ab2427ff1f Mon Sep 17 00:00:00 2001 From: darrenburns Date: Fri, 6 Jan 2023 16:28:34 +0000 Subject: [PATCH] Ensure pretty traceback for error in Widget compose method (#1505) * Ensure pretty traceback for error in Widget compose method * Fail fast and pretty tracebacks for Widget compose errors --- CHANGELOG.md | 1 + src/textual/widget.py | 6 +++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 64be93e2f..6eed95593 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/). ### Changed - `MouseScrollUp` and `MouseScrollDown` now inherit from `MouseEvent` and have attached modifier keys. https://github.com/Textualize/textual/pull/1458 +- Fail-fast and print pretty tracebacks for Widget compose errors https://github.com/Textualize/textual/pull/1505 ### Fixed diff --git a/src/textual/widget.py b/src/textual/widget.py index 65ff0bc0d..185d18a64 100644 --- a/src/textual/widget.py +++ b/src/textual/widget.py @@ -33,6 +33,7 @@ from rich.measure import Measurement from rich.segment import Segment from rich.style import Style from rich.text import Text +from rich.traceback import Traceback from . import errors, events, messages from ._animator import DEFAULT_EASING, Animatable, BoundAnimator, EasingFunction @@ -2333,7 +2334,10 @@ class Widget(DOMNode): raise TypeError( f"{self!r} compose() returned an invalid response; {error}" ) from None - await self.mount(*widgets) + except Exception: + self.app.panic(Traceback()) + else: + await self.mount(*widgets) def _on_mount(self, event: events.Mount) -> None: if self.styles.overflow_y == "scroll":