php尝试...其他

时间:2010-07-29 16:21:28

标签: php exception

PHP中的某些内容与Python中的try ... else类似吗?

我需要知道try块是否正确执行,因为块正确执行时,将打印一条消息。

6 个答案:

答案 0 :(得分:44)

PHP没有try / catch / else。但是,您可以在catch块中设置一个变量,用于确定它是否已运行:

$caught = false;

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

if (!$caught) {

}

答案 1 :(得分:5)

我认为“else”子句有点限制,除非你不关心那里抛出的任何异常(或者你想要冒泡那些异常)......从我对Python的理解,它基本上相当于这个:

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
}

所以它有点冗长(因为你需要重新抛出异常),但它也会像使用else子句一样冒泡堆栈...

编辑或者,更清洁的版本(仅限5.3)

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
}

修改2

重新阅读你的问题,我认为你可能会用“其他”块过度复杂化......如果你只是打印(不太可能抛出异常),你真的不需要否则阻止:

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

该代码只会打印 SuccessError ...从不同时(因为如果print函数抛出异常,它就赢了'实际打印...但我不认为print可以抛出异常......)。

答案 2 :(得分:0)

不熟悉python,但听起来像是在尝试使用异常的Catch块之后......

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

答案 3 :(得分:0)

try {
    $clean = false;
    ...
    $clean = true;
} catch (...) { ... }

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

这是你能做的最好的事情。

答案 4 :(得分:-1)

php中有try-catch

示例:

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';

答案 5 :(得分:-3)

您可以使用try { } catch () { }throw。见http://php.net/manual/en/language.exceptions.php

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

或手动:

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