Thread overview | |||||||
---|---|---|---|---|---|---|---|
|
October 30, 2006 Which exception | ||||
---|---|---|---|---|
| ||||
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; |
October 30, 2006 Re: Which exception | ||||
---|---|---|---|---|
| ||||
Posted in reply to Tom | 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?
|
October 30, 2006 Re: Which exception | ||||
---|---|---|---|---|
| ||||
Posted in reply to Frits van Bommel | == 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)?
> 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?
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;
|
October 30, 2006 Re: Which exception | ||||
---|---|---|---|---|
| ||||
Posted in reply to Tom | 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. |
October 30, 2006 Re: Which exception | ||||
---|---|---|---|---|
| ||||
Posted in reply to Frits van Bommel | 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;
|
Copyright © 1999-2021 by the D Language Foundation