ErrLookup › Textualize/textual
Textualize/textual
The lean application framework for Python. Build sophisticated user interfaces with a simple Python API. Run your apps in the terminal and a web browser. · Python · 238 source files
Analyzed at 06dbeef4bb on 2026-08-27. 155 documented errors.
| Code / Message | Type | Severity | Tags |
|---|---|---|---|
| module {__name__!r} has no attribute {name!r} | exception | error | python, attribute-access, lazy-import, module-getattr |
| Can't animate attribute {attribute!r} on {obj!r}; attribute | exception | error | python, textual, animation, attribute-access |
| Don't know how to animate {value!r}; Can only animate <int>, | exception | error | python, textual, animation, type-mismatch |
| Can't encode {datum!r} | exception | error | python, textual, serialization, type-mismatch, internal-api |
| must be bytes | exception | error | python, textual, serialization, type-mismatch, internal-api |
| More data expected | exception | error | python, textual, serialization, truncated-data, decode-error |
| Missing bytes in {bytes_data!r} | exception | error | python, textual, serialization, truncated-data, decode-error |
| Multiple handlers for key press {key_name!r}.\nWe found both | exception | error | python, textual, keyboard, event-handling, duplicate-handler |
| {duration!r} is not a valid duration. | validation | error | python, textual, animation, duration, parse-error |
| No handler for {event_name!r} | exception | warning | python, textual, event-handling, decorator, internal-api |
| App {name!r} not found in {lib!r} | exception | error | textual, import, app-discovery, cli |
| Unable to find app in {lib!r}, try specifying app with "foo. | exception | error | textual, import, app-discovery, cli |
| Multiple apps found {lib!r}, try specifying app with "foo.py | exception | error | textual, import, app-discovery, ambiguity |
| Unable to find {find_app!r} in {module!r} | exception | error | textual, import, packaging, attribute-error |
| Tried to insert a widget with ID {widget_id!r}, but a widget | exception | error | textual, widget, duplicate-id, mount |
| Widget.children is read-only: use Widget.mount(...) or Widge | exception | error | textual, widget-tree, read-only, children |
| The message class must have a 'control' to match with the on | exception | error | textual, decorator, event-handling, selector |
| The attribute {attribute!r} can't be matched; have you added | exception | error | textual, decorator, event-handling, selector |
| Unable to parse selector {css_selector!r} for {attribute}; c | exception | error | textual, decorator, css-selector, parse-error |
| end of file reached | exception | error | parser, state-machine, eof, tokenize |
| Expected a str, Path or list[str | Path] for the CSS_PATH. | validation | error | css, config, type-validation, textual |
| Can not create a worker from a non-async function unless `th | exception | error | worker, async, decorator, textual |
| unable to parse {action_args_str!r} in action {action!r} | exception | error | actions, parsing, literal-eval, textual |
| {variable_name} should contain a Screen type or callable, no | validation | error | screens, modes, subclass-validation, textual |
| expected a callable or string, got {screen_object!r} | exception | error | screens, modes, typeerror, textual |
| No mode called {mode!r} | exception | error | modes, screen-stack, keyerror, textual |
| Theme {theme_name!r} has not been registered. Call 'App.regi | validation | error | theme, reactive-validation, textual |
| Unable to import {driver_import!r}; {driver_class!r} is not | exception | critical | driver, environment, runtimeerror, textual |
| No known mode {self._current_mode!r} | exception | error | modes, internal-state, textual |
| No screens on stack | exception | error | screen-stack, textual, state-error |
| App is not running | exception | error | threading, asyncio, lifecycle, textual |
| The `call_from_thread` method must run in a different thread | exception | error | threading, asyncio, textual |
| MODES cannot contain instances, use a type instead (got inst | validation | error | modes, screens, typeerror, textual |
| No known mode {mode!r} | exception | error | modes, switch-mode, textual |
| Cannot use '_default' as a custom mode. | validation | error | modes, reserved-name, textual |
| Duplicated mode name {mode!r}. | validation | error | modes, duplicate-key, textual |
| add_mode() must be called with a Screen type, not an instanc | validation | error | modes, screens, typeerror, textual |
| Can't remove active mode {mode!r} | exception | error | modes, lifecycle, textual |
| Unknown mode {mode!r} | exception | warning | modes, unknown-mode, textual |
| No such mode {mode!r} | exception | error | |
| {self.name} must be one of {friendly_list(self._valid_values | validation | error | textual, css, style-property, enum-validation |
| {self.name} must be a str | validation | error | textual, css, type-error, style-property |
| invalid percentage value '{token}' | validation | error | textual, css, color, percentage-parse |
| Invalid color value {color} | validation | error | textual, css, color, type-error |
| unknown word {word!r} in style flags | validation | error | textual, css, text-style, enum-validation |
| cannot mix 'none' with other style flags | validation | error | textual, css, text-style, mutual-exclusion |
| {self.name} must be a str (e.g. '10%') or a float (e.g. 0.1) | validation | error | textual, css, fractional, validation |
| Expected a character or hatch value here; found {character!r | validation | error | textual, css, hatch, validation |
| Hatch character must have a cell length of 1 | validation | error | textual, css, hatch, unicode-width |
| DeclarationError(name, token, message) | validation | error | textual, css, declaration, stylesheet |
| reference to undefined variable '${variable_name}'; did you | validation | error | textual, css, variables, undefined-variable |
| Unable to parse filter {filter!r} as query | validation | error | textual, query, selector, parse-error |
| Query value is the wrong type; expected type {expect_type.__ | validation | error | textual, query, type-mismatch |
| No nodes match {self!r} on {self.node!r} | validation | error | textual, query, no-matches, dom |
| Call to only_one resulted in more than one matched node | validation | error | textual, query, too-many-matches |
| No nodes match {self!r} on dom{self.node!r} | validation | error | textual, query, no-matches, dom |
| Query value is the wrong type; expected type {expect_type.__ | validation | error | textual, query, type-mismatch |
| DeclarationError(error.name, error.token, error.message) | validation | error | textual, css, set-styles, declaration |
| {token!r} is not a valid scalar | validation | error | textual, css, scalar, parse, validation |
| expected dimensions; found {str(self)!r} | validation | error | textual, css, scalar, resolve, units |
| KeyError(key) | validation | error | textual, styles, keyerror, css-rules |
| failed to parse css; {error} | exception | error | textual, css, stylesheet, parse |
| unable to read CSS file {filename!r} | exception | error | textual, css, filenotfound, stylesheet, io |
| StylesheetErrors(css_rules) (renderable summarizing CSS rule | exception | error | textual, css, stylesheet, parse, renderable |
| Unexpected end of file; did you forget a '}' ? / Unexpected | exception | error | textual, css, tokenizer, unexpected-end |
| {expect.description} (found {error_line.split(';')[0]!r}). ; | exception | error | textual, css, tokenizer, syntax |
| unknown pseudo-class {pseudo_class!r}; did you mean {suggest | exception | error | textual, css, pseudo-class, selector, did-you-mean |
| unknown pseudo-class {pseudo_class!r}; must be one of {frien | exception | error | textual, css, pseudo-class, selector |
| Unexpected end of file; did you forget a '}' ? / Unexpected | exception | error | textual, css, tokenizer, unexpected-end |
| Index {index!r} does not correspond to a location in the doc | validation | error | textual, document, index, bounds, valueerror |
| Cannot add an edit to history before it has been performed u | exception | error | textual, document, history, undo, edit-ordering |
| SyntaxAwareDocument unavailable - tree-sitter is not install | exception | critical | textual, tree-sitter, optional-dependency, import |
| The document line index {line_index!r} is out of bounds. The | validation | error | textual, document, wrap, bounds, valueerror |
| {name!r} is an invalid {description}; identifiers must conta | validation | error | textual, dom, identifier, validation, regex |
| A Reactive class is required; for example: MyApp.theme | validation | error | textual, reactive, dom, typeerror, api-misuse |
| Unable to bind non-reactive attribute {name!r} on {self} | exception | error | textual, reactive, data-binding, dom |
| Unable to bind data; {reactive.owner.__name__} is not define | exception | error | textual, reactive, data-binding, tui |
| No {name!r} key in COMPONENT_CLASSES | exception | error | textual, css, component-classes, widget |
| Widget is missing attributes; have you called the constructo | exception | critical | textual, constructor, super, widget-init |
| node has no screen | exception | error | textual, mount, screen, lifecycle |
| Node 'id' attribute may not be changed once set (current id= | validation | error | textual, id, immutability, dom |
| invalid value for display (received {new_val!r}, expected {f | validation | error | textual, display, styles, validation |
| invalid value for visibility (received {new_value!r}, expect | validation | error | textual, visibility, styles, validation |
| Node matching {query_selector!r} is the wrong type; expected | exception | error | textual, query, type-mismatch, dom |
| No nodes match {query_selector!r} on {base_node!r} | exception | error | textual, query, no-matches, dom |
| Unable to parse {query_selector!r} as a query; check for syn | exception | error | textual, query, selector, syntax |
| Call to query_one resulted in more than one matched node | exception | error | textual, query, too-many-matches, dom |
| unable to run callback {event.callback!r}; {error} | exception | error | timer, callback, async, textual |
| Target offset is outside of currently-visible screen region. | exception | error | testing, pilot, mouse, coordinates, textual |
| Timed out while waiting for widgets to process pending messa | exception | error | testing, timeout, async, message-pump, textual |
| Node is missing data; Check you are calling super().__init__ | exception | error | reactive, constructor, init-order, textual |
| Node is missing data; Check you are calling super().__init__ | exception | error | reactive, constructor, init-order, textual |
| Can't set {obj}.{self.name!r}; reactive attributes with a co | exception | error | reactive, read-only, computed, textual |
| RLock.release called too many times | exception | error | locking, async, concurrency, textual |
| Can't await screen.dismiss() from the screen's message handl | exception | error | screen, dismiss, async, deadlock, textual |
| Can't make {self} active as it is not in the current stack. | exception | error | screen, navigation, stack, textual |
| Node must be running to subscribe to a signal (has {node} be | exception | error | signal, pubsub, mount-lifecycle, textual |
| unable to display {obj.__class__.__name__!r} type; must be a | exception | error | rendering, visual, type-error, textual |
| A widget can't be its own parent | exception | error | widget, dom-tree, constructor, textual |
| Widget positional arguments must be Widget subclasses; not { | exception | error | widget, constructor, type-error, textual |
| No common ancestor found | exception | error | dom-tree, widget, textual |
| No child found with id={id!r} | exception | error | dom-tree, lookup, widget, textual |
| Child with id={id!r} is the wrong type; expected type {expec | exception | error | dom-tree, type-mismatch, widget, textual |
| Descendant with id={id!r} is the wrong type; expected type { | exception | error | dom-tree, type-mismatch, query, textual |
| No immediate child of type {expect_type}; {self._nodes} | exception | error | dom-tree, lookup, type-mismatch, textual |
| Row key {row_key!r} is not valid. | exception | error | data-table, row-key, textual, lookup-failed |
| Row index {row_index!r} is not valid. | exception | error | data-table, index-out-of-range, textual, row |
| No row exists for row_key={row_key!r} | exception | error | data-table, row-key, textual, lookup-failed |
| Column key {column_key!r} is not valid. | exception | error | data-table, column-key, textual, lookup-failed |
| Column index {column_index!r} is not valid. | exception | error | data-table, index-out-of-range, textual, column |
| No column exists for column_key={column_key!r} | exception | error | data-table, column-key, textual, lookup-failed |
| No cell exists at {coordinate!r}. | exception | error | data-table, coordinate, textual, cell |
| The column key {key!r} already exists. | exception | error | data-table, duplicate-key, textual, column |
| The row key {row_key!r} already exists. | exception | error | data-table, duplicate-key, textual, row |
| More values provided than there are columns. | exception | error | data-table, value-error, textual, schema-mismatch |
| value must be a str | exception | error | textual, digits, type-error, widget |
| Input type must be one of {friendly_list(_RESTRICT_TYPES.key | exception | error | textual, input, value-error, enum-validation |
| pop from empty list | exception | error | textual, list-view, index-error, empty-collection |
| Can't write to the stream after it has stopped. | exception | error | textual, markdown, runtime-error, stream-closed |
| Template must contain at least one non-separator character | exception | error | textual, masked-input, value-error, template-validation |
| Value does not match template! | exception | error | textual, masked-input, value-error, validation |
| New options contain duplicated IDs; Ensure that the IDs are | exception | error | textual, option-list, duplicate-id, widget |
| Unable to add {option!r} due to duplicate ID | exception | error | optionlist, duplicate-id, textual, widget |
| There is no option with an ID of {option_id!r} | exception | error | optionlist, option-not-found, textual |
| There is no option with an index of {index} | exception | error | optionlist, index-out-of-range, textual |
| Unable to remove; there is no option at index {index} | exception | error | optionlist, remove, index-out-of-range, textual |
| Valid placeholder variants are {friendly_list(_VALID_PLACEHO | exception | error | placeholder, validation, textual, variant |
| Valid rule orientations are {friendly_list(_VALID_RULE_ORIEN | exception | error | rule, orientation, validation, textual |
| Valid rule line styles are {friendly_list(_VALID_LINE_STYLES | exception | error | rule, line-style, validation, textual |
| Select options cannot be empty if selection can't be blank. | exception | error | select, empty-options, textual, validation |
| Illegal select value {value!r}. Did you mean to use Select.c | exception | error | select, invalid-value, textual, reactive-validator |
| Can't clear selection if allow_blank is set to False. | exception | error | select, allow-blank, textual, clear |
| Expected 2 or 3 values, got {len(selection)} | exception | error | selection-list, tuple-length, textual, validation |
| Only Selection or a prompt/value tuple is supported in Selec | exception | error | selection-list, type-mismatch, textual |
| 'pane_id' must be a non-empty string or a TabPane with an id | exception | error | tabbed-content, missing-id, textual |
| 'pane_id' must be a non-empty string or a ContentTab with an | exception | error | tabbed-content, missing-id, textual |
| No Tab with id {active!r} | exception | error | tabs, active-id, validation, textual |
| {theme!r} is not a builtin theme, or it has not been registe | exception | error | textarea, theme, textual, registration |
| tree-sitter is available, but no built-in or user-registered | exception | warning | textarea, tree-sitter, language, missing-dependency, textual |
| Invalid UTF-8 byte: {first_byte} | exception | error | utf-8, encoding, text-area, textual, validation |
| Unable to add a node both before and after a node | exception | error | tree, insert, argument-validation, textual |
| The node specified for `before` is not a child of this node | exception | error | tree, stale-reference, insert, textual |
| `before` argument must be an index or a TreeNode object to a | exception | error | tree, type-error, insert, textual |
| The node specified for `after` is not a child of this node | exception | error | tree, stale-reference, insert, textual |
| `after` argument must be an index or a TreeNode object to ad | exception | error | tree, type-error, insert, textual |
| Attempt to remove the root node of a Tree. | exception | error | tree, root-node, remove, textual |
| No line no. {line} in the tree | exception | error | tree, cursor, index-out-of-range, textual |
| Unknown NodeID ({node_id}) in tree | exception | error | tree, node-id, lookup, textual |
| There is no active worker in this task or thread. | exception | error | worker, asyncio, context, textual |
| Unsupported attempt to run a thread worker | exception | error | worker, thread, type-error, textual |
| Request to run a non-async function as an async worker | exception | error | worker, async, thread, textual |
| Unsupported attempt to run an async worker | exception | error | worker, async, unsupported-operation, textual |
| Can't call worker.wait from within the worker function! | exception | error | worker, deadlock, async, textual |
| Worker must be started before calling this method. | exception | error | worker, lifecycle, async, textual |
| Worker was cancelled, and did not complete. | exception | warning | worker, cancellation, async, textual |