I've defined some setter and getter commands to facilitate entering complex content into my document. The basic definitions are as follows:
\newcommand\aeset[3]{\expandafter\newcommand\csname ae@#1@#2\endcsname{#3}}
\newcommand\aeget[2]{\csname ae@#1@#2\endcsname}
The problem I'm having is that if define the following
\aeset{this}{is}{an experiment}
and then later try to call it with
\aeget{that}{is}
The command just expands into a \relax without issuing a warning that
\ae@that@is
is not a defined control sequence. Is there a simple way to get around this without having to manually write all the testing arguments into my getter?

\ifcsname x\endcsnamewhen it isn't apparent that\xwas made\relax– Werner Dec 20 '15 at 07:25