Tcl Source Code

View Ticket
Login
Ticket UUID: d22ad202055093292992c6aea053188f8b3d4abe
Title: "dict unset d key subkey" fails if key does not exist
Type: Bug Created on: 2018-07-02 10:24:28
Submitter: oehhar Assigned to: nobody
Subsystem: 15. Dict Object Severity: Minor
Priority: 5 Medium Last modified: 2020-11-16 14:19:43
Status: Closed Closed by: oehhar
Resolution: Fixed Closed on: 2020-11-16 14:19:43
Version: >= 8.5
Description:

If a dictionary key is unset, there is no error, if it does not exist:

% set d {}
% dict unset d a

There is an error raised, if a key on the path of the subkey does not exist:

% set d {}
% dict unset d a b
key "a" not known in dictionary

IMHO this is inconsistent and should not rise an error.

At least the documentation should write about error behaviour.


I can understand, that an error is raised, if the (sub)dict is not a valid dict.

% set d {1}
% dict unset d a
missing value to go with key
% set d {a 1}
% dict unset d a b
missing value to go with key

User Comments:
sebres added on 2018-07-02 11:03:13:

Still worse (as regards the inconsistency), it does not produce any error if dictionary self (variable) does not exists:

% unset -nocomplain d
% catch { dict unset d a }
0

So I'm agree with Harald's conclusion, the `dict unset` must not produce an error if sub-key does not exists also.


oehhar added on 2020-11-16 14:19:30:

Tested again with tcl8.6.10. Is fixed. Thank you, Harald