title: F# / Argu - How to display help for two level command tree without throwing exception
body: <p>I have a two-level F# / Argu command tree. Its abbreviated version looks like that:</p>
  
  <pre><code>[&lt;CliPrefix(CliPrefix.Dash)&gt;]
  type RunContGenArgs =
      | [&lt;Unique&gt;] [&lt;EqualsAssignment&gt;] [&lt;AltCommandLine("-ql")&gt;] MaxQueueLength of int
  
  with
      interface IArgParserTemplate with
          member this.Usage =
              match this with
              | MaxQueueLength _ -&gt; "max queue length."
  and
      [&lt;CliPrefix(CliPrefix.None)&gt;]
      ContGenArguments =
          | [&lt;Unique&gt;] [&lt;AltCommandLine("run")&gt;]      RunContGen of ParseResults&lt;RunContGenArgs&gt;
      with
          interface IArgParserTemplate with
              member this.Usage =
                  match this with
                  | RunContGen _ -&gt; "run Continuous Generation."
  </code></pre>
  
  <p>which, I then use as follows:</p>
  
  <pre><code>[&lt;EntryPoint&gt;]
  let main argv =
      let parser = ArgumentParser.Create&lt;ContGenArguments&gt;(programName = "ContGen.exe")
      let results = parser.Parse argv
  
      match results.GetAllResults() |&gt; ContGenTask.tryCreate with
      | Some task -&gt; task.run()
      | None -&gt;
          printfn "%s" (parser.PrintUsage())
          -1
  </code></pre>
  
  <p>If I run the command like <code>ContGen.exe run help</code>, then it correctly displays help for the command <code>run</code>. However, it then crashes with ugly exception:</p>
  
  <pre><code>Unhandled Exception: Argu.ArguParseException: USAGE: ContGen.exe runcontgen [help] [-maxqueuelength=&lt;int&gt;]
  OPTIONS:
      -maxqueuelength, -ql=&lt;int&gt;
                            max queue length.
      help                  display this list of options.
     at Argu.ExceptionExiter.Argu-IExiter-Exit[a](String msg, ErrorCode errorCode) in C:\Users\eirik.tsarpalis\devel\public\Argu\src\Argu\Types.fs:line 62
     at Argu.ArgumentParser\`1.Parse(FSharpOption\`1 inputs, FSharpOption\`1 configurationReader, FSharpOption\`1 ignoreMissing, FSharpOption\`1 ignoreUnrecognized, FSharpOption\`1 raiseOnUsage) in C:\Users\eirik.tsarpalis\devel\public\Argu\src\Argu\ArgumentParser.fs:line 180
     at Program.main(String[] argv) in C:\GitHub\ClmFSharp\Clm\ContGen\Program.fs:line 8
  </code></pre>
  
  <p>If I change <code>let results = parser.Parse argv</code> into <code>let results = parser.Parse(argv, raiseOnUsage = false)</code>, then it does not crash but does not display any help message. And then since command <code>run</code> can run without any second level argument, the program just keeps going instead of displaying help and quitting. </p>
  
  <p>However, I need <code>ContGen.exe run help</code> just display help message and then quit. How can I achieve that? Thanks.</p>