Coincidentally, I got annoyed at getting an exception from
format/2 on incorrect “n placeholder”/“m arguments” matching if “n > m” and used this annoyance to look at what other systems are doing.
IMHO, Perl does it best. It warns if there is a problem (even if this problem is due to wrong argument type) - STDERR was invented for this - and continues. This absolutely makes sense in a dynamic language, where much more high-level stuff is going on and surprises during formatting output should probably rarely, if ever, lead to program halt.
#!/usr/bin/perl -w printf "%d %s %s %s %s\n", "x", "a", "b", "c"; printf "Ok, Buddy!\n";
Argument "x" isn't numeric in printf at test.pl line 3. Missing argument in printf at test.pl line 3. 0 a b c Ok, Buddy!
Just my 2 cents, as a decision on “erroring out in all cases” has been taken already.