0

我在我正在使用的框架中有一个 try catch,当触发 catch 时它会显示一个错误报告页面,这个报告页面中的一件事是它显示一个菜单,其中时间来自数据库

我认为它的作用是我会在 catch 中放置另一个 try catch 以防数据库可以连接到,像这样

try
{
    code that would throw an excpetion
}
catch(Exception $e)
{
    try
    {
        connect to database
        run query
        log error in database
        output screen using database data
    }
    catch(Exception $e)
    {
        output screen using static html
    }
}

这样,如果异常是数据库连接错误,它将使用静态 html 输出而不是从数据库数据生成的动态输出

但是,当我导致数据库错误(删除所需的表)时,我的静态 html 不起作用

我想知道 try catch 是否有可能在 catch 或天气中起作用,这是框架(我正在使用 magento),我问这个是因为如果可以做到,那么我会花时间找出原因框架阻止了我

4

1 回答 1

1

是的,可以将 try/catch 块放入 catch 块中。

但是,根据您的描述,听起来您想要更“智能”的异常捕获。你可以这样做:

try {
    // some operations including something with a database
}
catch (DatabaseException $e) {
    // the exception thrown by the code above was a DatabaseException
    // output some error message without using the database
}
catch (Exception $e) {
    // the exception thrown by the code above could have been any type of exception EXCEPT a DatabaseException
    // so you can still try to use the database to compose the error message
}

请注意,任何可以抛出异常的东西在从 catch 块运行时也会抛出这些异常。例如,当 try 块在到达任何数据库代码之前抛出异常时,在处理原始的非数据库异常时仍然可能发生数据库异常。

于 2013-08-07T23:50:49.667 回答