标签: catch-block

捕获Java中的异常

在Java中存在某些预定义的异常,如果抛出这些异常,则会报告发生了严重的事情,并且您可以更好地改进代码,而不是在catch块中捕获它们(如果我已正确理解它).但我仍然发现许多程序,其中包括以下内容:

} catch (IOException e) {
     ...
} catch (FileNotFoundException e) {
     ....
}
Run Code Online (Sandbox Code Playgroud)

我认为IOException和FileNotFoundException正是这种异常,我们不应该在catch块中捕获它们.为什么人们这样做?这样抓住他们会更好吗?无论如何,Java编译器都会警告这种问题.

谢谢.

java exception-handling exception catch-block

4
推荐指数
2
解决办法
3342
查看次数

为什么ReSharper建议删除自己的修复程序?

ReSharper建议重新抛出异常然后,当我这样做时,它表示整个catch子句无论如何都是多余的,并建议将其删除.

我(从MethodMan使用此代码在这里):

public static DataTable ExecuteDataSet(string sql, CommandType cmdType, params SqlParameter[] parameters)
{
    using (DataSet ds = new DataSet())
    using (SqlConnection connStr = new SqlConnection(UsageRptConstsAndUtils.CPSConnStr))
    using (SqlCommand cmd = new SqlCommand(sql, connStr))
    {
        cmd.CommandType = cmdType;
        foreach (var item in parameters)
        {
            cmd.Parameters.Add(item);
        }

        try
        {
            cmd.Connection.Open();
            new SqlDataAdapter(cmd).Fill(ds);
        }
        catch (SqlException ex)
        {
            throw;
        }
        return ds.Tables[0];
    }
}
Run Code Online (Sandbox Code Playgroud)

当我在解决方案中有ReSharper Inspect> Code Issues时,它想知道"异常重新抛出可能是否有意":

catch (SqlException ex)
{
    throw ex;
}
Run Code Online (Sandbox Code Playgroud)

如果我接受ReSharper的建议修复("rethrow exception"),Resharper将删除"ex":

catch (SqlException ex)
{
    throw; …
Run Code Online (Sandbox Code Playgroud)

c# resharper sqlexception catch-block rethrow

3
推荐指数
1
解决办法
445
查看次数

catch块中的语句未执行

我写了一段代码,以catch具体exception与帮助这个链接.它像是:

catch (SQLException sqle) {
    // TODO Auto-generated catch block
String sqlMessage = sqle.getMessage();
String sqlState = sqle.getSQLState();
int vendorCode = sqle.getErrorCode();
System.out.println("Exception occurred:");
System.out.println("Message: " + sqlMessage);
System.out.println("SQL state: " + sqlState);
System.out.println("Vendor code: " + vendorCode); 
}
Run Code Online (Sandbox Code Playgroud)

但我得到输出为:

java.sql.SQLException: ORA-00001: unique constraint (SYSTEM.PK_USERID) violated

at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:125)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:305)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:272)
at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:623)
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:181)
at oracle.jdbc.driver.T4CPreparedStatement.execute_for_rows(T4CPreparedStatement.java:543)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1028)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:2888)
at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:2960)
at accessdb.Dao.insertnewuser(Dao.java:32)
at Registration.doGet(Registration.java:47)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) …
Run Code Online (Sandbox Code Playgroud)

java exception-handling exception catch-block

1
推荐指数
1
解决办法
1897
查看次数

在Tcl中检查参数是否是字典

我想要一个proc,如果它的'参数是一个Tcl 8.5及以上的字典,它会做什么.我从Tcl dict命令中找不到任何直截了当的东西.我可以使用的代码是:

proc dict? {dicty} { 
    expr { [catch { dict info $dicty } ] ? 0 : 1 }
}
Run Code Online (Sandbox Code Playgroud)

是否有什么不使用catch,内置的东西?
谢谢.

dictionary tcl catch-block

1
推荐指数
1
解决办法
1504
查看次数

对多个 then 方法使用相同的 catch 块

鉴于:

  • NodeJS v0.10.25
  • 启用所有 Harmony 功能
  • "use strict"

以及以下代码:

   db.connect({
      host: DB_HOST,
      port: DB_PORT
    }).then(function(dbConn) {
      console.log('DBASE connected to ' + DB_HOST + ':' + DB_PORT);
      db.dbList().run(dbConn).then(function(result) {
        if (result.indexOf(SCRIPT_NAME) == -1) throw new Error('unable to locate database ' + SCRIPT_NAME);
        dbConn.use(SCRIPT_NAME);
        console.log('DBASE bound to ' + SCRIPT_NAME + ' on ' + DB_HOST + ':' + DB_PORT);
        db.tableList().run(dbConn)
          .then(function(result) {
            if (!result) throw new Error(SCRIPT_NAME + ' unable to enumerate tables');
            if (!result.length) throw new Error(SCRIPT_NAME + ' has …
Run Code Online (Sandbox Code Playgroud)

error-handling catch-block node.js promise

1
推荐指数
1
解决办法
1319
查看次数

为什么......(三点)在catch块中存在?

在 try catch 语句中,我们可以执行以下操作:

try{}
catch(...){}
Run Code Online (Sandbox Code Playgroud)

据我所知,...意味着任何例外。

我的问题是:为什么 C++ 标准选择这种方式(...)而不是仅仅选择这种方式()?而例如,在函数中,如果您不需要参数,您只需输入()

void foo();
Run Code Online (Sandbox Code Playgroud)

它与可变参数模板有任何关系吗?

c++ catch-block language-lawyer c++11

1
推荐指数
1
解决办法
1732
查看次数

为什么使用Maybe时catch不能正确调用处理程序?

考虑以下 Haskell 代码

try_lex_rgx :: String -> IO (Maybe [RgxToken])

try_lex_rgx rgx_str =
  catch
    (do
        rgx_toks <- evaluate $ lex_rgx rgx_str
        return $ Just rgx_toks)
    (\(LexerErr err_msg remainder) -> disp_lex_error rgx_str (LexerErr err_msg remainder))
Run Code Online (Sandbox Code Playgroud)

我打算让这段代码工作的方式是评估表达式lex_rgx rgx_str,在它们发生时捕获任何异常,然后调用disp_lex_error以漂亮地打印错误。

(顺便说一下,disp_lex_error的代码如下

disp_lex_error :: String -> RgxLexerException -> IO (Maybe [RgxToken])

disp_lex_error rgx_str (LexerErr err_msg remainder) = let loc_str_frag = "In regex " ++ rgx_str ++ " at ..." in
                                                        do 
                                                            hPutStrLn stderr ("Lexer error: " ++ err_msg ++ "\n" ++ …
Run Code Online (Sandbox Code Playgroud)

haskell exception lazy-evaluation catch-block

1
推荐指数
1
解决办法
53
查看次数

catch块版本C#6和旧版本之间有所不同

在C#6中,您可以创建以下代码:

try  { }
catch (Exception e) when (e is NullReferenceException) { }
catch (Exception e) when (e is UnauthorizedAccessException) { }
Run Code Online (Sandbox Code Playgroud)

但是上面的代码和下面的旧C#代码有什么不同?

try  { }
catch (NullReferenceExceptione e) { }
catch (UnauthorizedAccessExceptione e) { }
Run Code Online (Sandbox Code Playgroud)

对我来说,旧版本看起来最短,最好用.

c# try-catch catch-block c#-6.0

0
推荐指数
1
解决办法
50
查看次数