Tcl Source Code

View Ticket
Bounty program for improvements to Tcl and certain Tcl packages.
Ticket UUID: d22ad202055093292992c6aea053188f8b3d4abe
Title: "dict unset d key subkey" fails if key does not exist
Type: Bug Version: >= 8.5
Submitter: oehhar Created on: 2018-07-02 10:24:28
Subsystem: 15. Dict Object Assigned To: nobody
Priority: 5 Medium Severity: Minor
Status: Open Last Modified: 2018-07-02 11:04:59
Resolution: None Closed By: nobody
    Closed on:

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 }

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