Ruby rescue custom exception





.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ height:90px;width:728px;box-sizing:border-box;
}







0















In following example:



class Foo
class MyCustomerror < StandardError
def message
"My custom error"
end
end

def self.do_standard
1 / 0
rescue StandardError => e
puts e.message
end

def self.do_custom
1 / 0
rescue MyCustomerror => e
puts e.message
end
end


I have a problem with call rescue block which params is MyCustomerror.
If i call Foo.do_standard, rescue block is called, however when i call Foo.do_custom rescue block with MyCustomerror isn't called. Where is the problem?










share|improve this question


















  • 1





    rescue MyCustomerror rescues MyCustomerror and its subclasses. But ZeroDivisionError isn't one of its subclasses.

    – Stefan
    Nov 16 '18 at 16:35


















0















In following example:



class Foo
class MyCustomerror < StandardError
def message
"My custom error"
end
end

def self.do_standard
1 / 0
rescue StandardError => e
puts e.message
end

def self.do_custom
1 / 0
rescue MyCustomerror => e
puts e.message
end
end


I have a problem with call rescue block which params is MyCustomerror.
If i call Foo.do_standard, rescue block is called, however when i call Foo.do_custom rescue block with MyCustomerror isn't called. Where is the problem?










share|improve this question


















  • 1





    rescue MyCustomerror rescues MyCustomerror and its subclasses. But ZeroDivisionError isn't one of its subclasses.

    – Stefan
    Nov 16 '18 at 16:35














0












0








0








In following example:



class Foo
class MyCustomerror < StandardError
def message
"My custom error"
end
end

def self.do_standard
1 / 0
rescue StandardError => e
puts e.message
end

def self.do_custom
1 / 0
rescue MyCustomerror => e
puts e.message
end
end


I have a problem with call rescue block which params is MyCustomerror.
If i call Foo.do_standard, rescue block is called, however when i call Foo.do_custom rescue block with MyCustomerror isn't called. Where is the problem?










share|improve this question














In following example:



class Foo
class MyCustomerror < StandardError
def message
"My custom error"
end
end

def self.do_standard
1 / 0
rescue StandardError => e
puts e.message
end

def self.do_custom
1 / 0
rescue MyCustomerror => e
puts e.message
end
end


I have a problem with call rescue block which params is MyCustomerror.
If i call Foo.do_standard, rescue block is called, however when i call Foo.do_custom rescue block with MyCustomerror isn't called. Where is the problem?







ruby exception custom-exceptions






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Nov 16 '18 at 14:40









user3471671user3471671

69112




69112








  • 1





    rescue MyCustomerror rescues MyCustomerror and its subclasses. But ZeroDivisionError isn't one of its subclasses.

    – Stefan
    Nov 16 '18 at 16:35














  • 1





    rescue MyCustomerror rescues MyCustomerror and its subclasses. But ZeroDivisionError isn't one of its subclasses.

    – Stefan
    Nov 16 '18 at 16:35








1




1





rescue MyCustomerror rescues MyCustomerror and its subclasses. But ZeroDivisionError isn't one of its subclasses.

– Stefan
Nov 16 '18 at 16:35





rescue MyCustomerror rescues MyCustomerror and its subclasses. But ZeroDivisionError isn't one of its subclasses.

– Stefan
Nov 16 '18 at 16:35












1 Answer
1






active

oldest

votes


















2














There is no place in your code that could raise a MyCustomError exception, so there is nothing to rescue from. The only exception that could possibly be raised by that code is a ZeroDivisionError.






share|improve this answer
























  • It might be worth noting that ZeroDivisionError inherits from StandardError which is why rescue StandardError rescues it.

    – Stefan
    Nov 16 '18 at 16:45











  • Place or not place. It does not explain why in case call method do_standard is caught by StandardError, instead in case call do_custom not.

    – user3471671
    Nov 16 '18 at 19:04











  • @Stefan In the above example MyCustomerror is also inherited by StandardError!

    – user3471671
    Nov 16 '18 at 19:07













  • Both functions raise ZeroDivisionError. ZeroDivisionError is a StandardError so .do_standard rescues it. ZeroDivisionError is not a MyCustomerror and so .do_custom does not rescue it.

    – David Maze
    Nov 17 '18 at 2:41











  • @user3471671 it's the other way round: MyCustomerror inherits from StandardError. In the class hierarchy, MyCustomerror and ZeroDivisionError are siblings.

    – Stefan
    Nov 17 '18 at 13:57












Your Answer






StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");

StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});

function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});


}
});














draft saved

draft discarded


















StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53339974%2fruby-rescue-custom-exception%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown

























1 Answer
1






active

oldest

votes








1 Answer
1






active

oldest

votes









active

oldest

votes






active

oldest

votes









2














There is no place in your code that could raise a MyCustomError exception, so there is nothing to rescue from. The only exception that could possibly be raised by that code is a ZeroDivisionError.






share|improve this answer
























  • It might be worth noting that ZeroDivisionError inherits from StandardError which is why rescue StandardError rescues it.

    – Stefan
    Nov 16 '18 at 16:45











  • Place or not place. It does not explain why in case call method do_standard is caught by StandardError, instead in case call do_custom not.

    – user3471671
    Nov 16 '18 at 19:04











  • @Stefan In the above example MyCustomerror is also inherited by StandardError!

    – user3471671
    Nov 16 '18 at 19:07













  • Both functions raise ZeroDivisionError. ZeroDivisionError is a StandardError so .do_standard rescues it. ZeroDivisionError is not a MyCustomerror and so .do_custom does not rescue it.

    – David Maze
    Nov 17 '18 at 2:41











  • @user3471671 it's the other way round: MyCustomerror inherits from StandardError. In the class hierarchy, MyCustomerror and ZeroDivisionError are siblings.

    – Stefan
    Nov 17 '18 at 13:57
















2














There is no place in your code that could raise a MyCustomError exception, so there is nothing to rescue from. The only exception that could possibly be raised by that code is a ZeroDivisionError.






share|improve this answer
























  • It might be worth noting that ZeroDivisionError inherits from StandardError which is why rescue StandardError rescues it.

    – Stefan
    Nov 16 '18 at 16:45











  • Place or not place. It does not explain why in case call method do_standard is caught by StandardError, instead in case call do_custom not.

    – user3471671
    Nov 16 '18 at 19:04











  • @Stefan In the above example MyCustomerror is also inherited by StandardError!

    – user3471671
    Nov 16 '18 at 19:07













  • Both functions raise ZeroDivisionError. ZeroDivisionError is a StandardError so .do_standard rescues it. ZeroDivisionError is not a MyCustomerror and so .do_custom does not rescue it.

    – David Maze
    Nov 17 '18 at 2:41











  • @user3471671 it's the other way round: MyCustomerror inherits from StandardError. In the class hierarchy, MyCustomerror and ZeroDivisionError are siblings.

    – Stefan
    Nov 17 '18 at 13:57














2












2








2







There is no place in your code that could raise a MyCustomError exception, so there is nothing to rescue from. The only exception that could possibly be raised by that code is a ZeroDivisionError.






share|improve this answer













There is no place in your code that could raise a MyCustomError exception, so there is nothing to rescue from. The only exception that could possibly be raised by that code is a ZeroDivisionError.







share|improve this answer












share|improve this answer



share|improve this answer










answered Nov 16 '18 at 14:47









Jörg W MittagJörg W Mittag

294k63359557




294k63359557













  • It might be worth noting that ZeroDivisionError inherits from StandardError which is why rescue StandardError rescues it.

    – Stefan
    Nov 16 '18 at 16:45











  • Place or not place. It does not explain why in case call method do_standard is caught by StandardError, instead in case call do_custom not.

    – user3471671
    Nov 16 '18 at 19:04











  • @Stefan In the above example MyCustomerror is also inherited by StandardError!

    – user3471671
    Nov 16 '18 at 19:07













  • Both functions raise ZeroDivisionError. ZeroDivisionError is a StandardError so .do_standard rescues it. ZeroDivisionError is not a MyCustomerror and so .do_custom does not rescue it.

    – David Maze
    Nov 17 '18 at 2:41











  • @user3471671 it's the other way round: MyCustomerror inherits from StandardError. In the class hierarchy, MyCustomerror and ZeroDivisionError are siblings.

    – Stefan
    Nov 17 '18 at 13:57



















  • It might be worth noting that ZeroDivisionError inherits from StandardError which is why rescue StandardError rescues it.

    – Stefan
    Nov 16 '18 at 16:45











  • Place or not place. It does not explain why in case call method do_standard is caught by StandardError, instead in case call do_custom not.

    – user3471671
    Nov 16 '18 at 19:04











  • @Stefan In the above example MyCustomerror is also inherited by StandardError!

    – user3471671
    Nov 16 '18 at 19:07













  • Both functions raise ZeroDivisionError. ZeroDivisionError is a StandardError so .do_standard rescues it. ZeroDivisionError is not a MyCustomerror and so .do_custom does not rescue it.

    – David Maze
    Nov 17 '18 at 2:41











  • @user3471671 it's the other way round: MyCustomerror inherits from StandardError. In the class hierarchy, MyCustomerror and ZeroDivisionError are siblings.

    – Stefan
    Nov 17 '18 at 13:57

















It might be worth noting that ZeroDivisionError inherits from StandardError which is why rescue StandardError rescues it.

– Stefan
Nov 16 '18 at 16:45





It might be worth noting that ZeroDivisionError inherits from StandardError which is why rescue StandardError rescues it.

– Stefan
Nov 16 '18 at 16:45













Place or not place. It does not explain why in case call method do_standard is caught by StandardError, instead in case call do_custom not.

– user3471671
Nov 16 '18 at 19:04





Place or not place. It does not explain why in case call method do_standard is caught by StandardError, instead in case call do_custom not.

– user3471671
Nov 16 '18 at 19:04













@Stefan In the above example MyCustomerror is also inherited by StandardError!

– user3471671
Nov 16 '18 at 19:07







@Stefan In the above example MyCustomerror is also inherited by StandardError!

– user3471671
Nov 16 '18 at 19:07















Both functions raise ZeroDivisionError. ZeroDivisionError is a StandardError so .do_standard rescues it. ZeroDivisionError is not a MyCustomerror and so .do_custom does not rescue it.

– David Maze
Nov 17 '18 at 2:41





Both functions raise ZeroDivisionError. ZeroDivisionError is a StandardError so .do_standard rescues it. ZeroDivisionError is not a MyCustomerror and so .do_custom does not rescue it.

– David Maze
Nov 17 '18 at 2:41













@user3471671 it's the other way round: MyCustomerror inherits from StandardError. In the class hierarchy, MyCustomerror and ZeroDivisionError are siblings.

– Stefan
Nov 17 '18 at 13:57





@user3471671 it's the other way round: MyCustomerror inherits from StandardError. In the class hierarchy, MyCustomerror and ZeroDivisionError are siblings.

– Stefan
Nov 17 '18 at 13:57




















draft saved

draft discarded




















































Thanks for contributing an answer to Stack Overflow!


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53339974%2fruby-rescue-custom-exception%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

Xamarin.iOS Cant Deploy on Iphone

Glorious Revolution

Dulmage-Mendelsohn matrix decomposition in Python