24

Is there something similar in PHP to the try ... else in Python?

I need to know if the try block executed correctly as when the block executed correctly, a message will be printed.

6 Answers 6

62

PHP does not have try/catch/else. You could however set a variable in the catch block that can be used to determine if it was run:

$caught = false;

try {
    // something
} catch (Exception $e) {
    $caught = true;
}

if (!$caught) {

}
Sign up to request clarification or add additional context in comments.

2 Comments

This gets full of $caught = true; statements if there are several catch blocks.
One minor note, python's else block would only be executed if $caught is false, not true...
7

I think the "else" clause is a bit limiting, unless you don't care about any exceptions thrown there (or you want to bubble those exceptions)... From my understanding of Python, it's basically the equivalent of this:

try {
    //...Do Some Stuff Here
    try {
        // Else block code here
    } catch (Exception $e) {
        $e->elseBlock = true;
        throw $e;
    }
} catch (Exception $e) {
    if (isset($e->elseBlock) && $e->elseBlock) {
        throw $e;
    }
    // catch block code here
}

So it's a bit more verbose (since you need to re-throw the exceptions), but it also bubbles up the stack the same as the else clause...

Edit Or, a bit cleaner version (5.3 only)

class ElseException extends Exception();

try {
    //...Do Some Stuff Here
    try {
        // Else block code here
    } catch (Exception $e) {
        throw new ElseException('Else Clasuse Exception', 0, $e);
    }
} catch (ElseException $e) {
    throw $e->getPrevious();
} catch (Exception $e) {
    // catch block code here
}

Edit 2

Re-reading your question, I think you may be overcomplicating things with an "else" block... If you're just printing (which isn't likely to throw an exception), you don't really need an else block:

try {
    // Do Some stuff
    print "Success";
} catch (Exception $e) {
    //Handle error here
    print "Error";
}

That code will only ever print either Success or Error... Never both (since if the print function throws the exception, it won't be actually printed... But I don't think the print CAN throw exceptions...).

2 Comments

In my case it worked fine putting the next try{} inside the catch{}
@ircmaxell Your "Edit 2" answer is a good answer. Maybe post it as a separate answer so that it can be voted up by itself.
0

Not familiar with python but it sounds like you're after Try Catch blocks used with exceptions...

http://php.net/manual/en/language.exceptions.php

Comments

0

There is try-catch in php.

Example:

function inverse($x) {
    if (!$x) {
        throw new Exception('Division by zero.');
    }
    else return 1/$x;
}

try {
    echo inverse(5) . "\n";
    echo inverse(0) . "\n";
} catch (Exception $e) {
    echo 'Caught exception: ',  $e->getMessage(), "\n";
}

// Continue execution
echo 'Hello World';

1 Comment

The question was about php equivalent to python's "try-else", that is having a compact way of executing a block of code after the try block whenever no exception is thrown.
0
try {
    $clean = false;
    ...
    $clean = true;
} catch (...) { ... }

if (!$clean) {
    //...
}

That's the best you can do.

2 Comments

You should set $clean to it's initial value before you enter the try..catch block. See webbiedave's answer.
@jmz Hum? Why? it's indifferent; there's no block scope in PHP.
-2

You can use try { } catch () { } and throw. See http://php.net/manual/en/language.exceptions.php

try {
    $a = 13/0; // should throw exception
} catch (Exception $e) {
    echo 'Caught exception: ',  $e->getMessage(), "\n";
}

or manually:

try {
    throw new Exception("I don't want to be tried!");
} catch (Exception $e) {
    echo 'Caught exception: ',  $e->getMessage(), "\n";
}

7 Comments

I didn't downvote, but he was asking about the else block, not exceptions in general...
Oh, and $a = 13/0; will not throw an exception unless you have an error handler installed that throws exceptions (set_error_handler(function($errno, $errstr, $errfile, $errline) { throw new ErrorException($errstr, 0, $errno, $errfile, $errline);});... php.net/manual/en/class.errorexception.php)
Is PHP's "catch" block not equivalent to Python's "else" block?
@enobrev: No it isn't. See my answer below.
@enobrev, the difference is that exceptions thrown in the else clause are not caught by the except/catch block. So a little more logic is required than just placing the else within the try (as my answer tries to communicate)...
|

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.