www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - Which exception

reply Tom <tom nospam.com> writes:
Hey,

lets say I have something like the following:

try {
	// Code that throws some exception I don't know of.
} catch (Exception ex) {
	writefln(ex.classinfo.name); // works but it's not what I need
}

Is there some way to get the name of the class 'ex' is instance of (the 
derived class and not the base class)?

Thanks in advance,
--
Tom;
Oct 29 2006
parent reply Frits van Bommel <fvbommel REMwOVExCAPSs.nl> writes:
Tom wrote:
 Hey,
 
 lets say I have something like the following:
 
 try {
     // Code that throws some exception I don't know of.
 } catch (Exception ex) {
     writefln(ex.classinfo.name); // works but it's not what I need
 }
 
 Is there some way to get the name of the class 'ex' is instance of (the 
 derived class and not the base class)?

I'm sorry, but what *is* it that you need if not the above? import std.stdio; class DerivedException : Exception { this() { super(""); } } void main() { try { // Code that throws some exception. throw new DerivedException; } catch (Exception ex) { writefln(ex.classinfo.name); // writes "DerivedException" } } The above code writes "DerivedException" to stdout, which is the name of the most derived class ex is an instance of. Am I missing something?
Oct 29 2006
parent reply Tom <tom nospam.com> writes:
== Quote from Frits van Bommel (fvbommel REMwOVExCAPSs.nl)'s article
 Tom wrote:
 Hey,

 lets say I have something like the following:

 try {
     // Code that throws some exception I don't know of.
 } catch (Exception ex) {
     writefln(ex.classinfo.name); // works but it's not what I need
 }

 Is there some way to get the name of the class 'ex' is instance of (the
 derived class and not the base class)?

import std.stdio; class DerivedException : Exception { this() { super(""); } } void main() { try { // Code that throws some exception. throw new DerivedException; } catch (Exception ex) { writefln(ex.classinfo.name); // writes "DerivedException" } } The above code writes "DerivedException" to stdout, which is the name of the most derived class ex is an instance of. Am I missing something?

No, you're right. It works here, on a WinXP machine. When I get home later, I'll test it on my Linux, where it didn't work. I hope it's only my mistake and not a linux-specific bug. Regards, -- Tom;
Oct 30 2006
parent reply Frits van Bommel <fvbommel REMwOVExCAPSs.nl> writes:
Tom wrote:
 == Quote from Frits van Bommel (fvbommel REMwOVExCAPSs.nl)'s article

 The above code writes "DerivedException" to stdout, which is the name of
 the most derived class ex is an instance of.
 Am I missing something?

No, you're right. It works here, on a WinXP machine. When I get home later, I'll test it on my Linux, where it didn't work. I hope it's only my mistake and not a linux-specific bug.

Just tried it in my VMWare window: urxae ubuntu:~/tmp$ cat test.d import std.stdio; class DerivedException : Exception { this() { super(""); } } void main() { try { // Code that throws some exception. throw new DerivedException; } catch (Exception ex) { writefln(ex.classinfo.name); // writes "DerivedException" } } urxae ubuntu:~/tmp$ dmd -run test.d DerivedException urxae ubuntu:~/tmp$ uname -a Linux ubuntu 2.6.17-10-386 #2 Fri Oct 13 18:41:40 UTC 2006 i686 GNU/Linux So that's not it either.
Oct 30 2006
parent Tom <tom nospam.com> writes:
Frits van Bommel wrote:
 Tom wrote:
 == Quote from Frits van Bommel (fvbommel REMwOVExCAPSs.nl)'s article

 The above code writes "DerivedException" to stdout, which is the name of
 the most derived class ex is an instance of.
 Am I missing something?

No, you're right. It works here, on a WinXP machine. When I get home later, I'll test it on my Linux, where it didn't work. I hope it's only my mistake and not a linux-specific bug.

Just tried it in my VMWare window: urxae ubuntu:~/tmp$ cat test.d import std.stdio; class DerivedException : Exception { this() { super(""); } } void main() { try { // Code that throws some exception. throw new DerivedException; } catch (Exception ex) { writefln(ex.classinfo.name); // writes "DerivedException" } } urxae ubuntu:~/tmp$ dmd -run test.d DerivedException urxae ubuntu:~/tmp$ uname -a Linux ubuntu 2.6.17-10-386 #2 Fri Oct 13 18:41:40 UTC 2006 i686 GNU/Linux So that's not it either.

Shit! the same here. I could swear that yesterday I had code that failed to perform correctly on the topic. Today I can't reproduce it, shame on me (maybe I'm hallucinating). It'll have to be next time (hope not) :( Thanks anyway! -- Tom;
Oct 30 2006