ASP中使用try,catch
一般来说任何程序都有BUG,软件测试人员也是人,而不是神,他也不可能把所有的BUG 都出来,在编写程序结束的时候,我们用上try catch,不让用户看到错误,由于用户不懂,所以他就认为你的程序是完美的,你看微软,说是更新,其实说白了,也是对系统的修复,修复里面的BUG,这是一种用法。
如果你做商业程序,涉及到了金钱,也要用try catch,因为要预防出现特殊问题,事件只执行了一半,比如说客户这边的金额已经扣除了,而商户那边还没有增加,那么那钱不就凭空消失了吗?或者说商户的帐户里增加了金额,而用户那边还没扣除就遇到了特殊情况,钱突然增加了,那么这个钱谁来承担?涉及到金钱,不能那么草率,我们一般都要用到事务回滚,你应该学习过事务回滚,需要try catch。所以说try catch还是很重要的
几条建议:
☆如果无法处理某个异常,那就不要捕获它。
☆如果捕获了一个异常,请不要胡乱处理它。
☆尽量在靠近异常被抛出的地方捕获异常。
☆在捕获异常的地方将它记录到日志中,除非您打算将它重新抛出。
☆按照您的异常处理必须多精细来构造您的方法。
☆需要用几种类型的异常就用几种,尤其是对于应用程序异常。
☆把低层次的异常封装成层次较高程序员较容易理解的异常。
☆尽量输出造成异常的完整数据
☆尽量捕获具有特定含义的异常:比如SqlException,而不是简单地捕获一个Exception。
try { [tryStatements]} catch(exception) { [catchStatements]} finally { [finallyStatements]}
参数
tryStatements
可选。可能发生错误的语句。
exception
必选。任何变量名称。exception 的初始值是引发的错误的值。
catchStatements
可选。处理在相关联的 tryStatement 中发生的错误的语句。
finallyStatements
可选。在所有其他的错误过程发生之后被无条件执行的语句。
备注
处理一样。
tryStatements 参数包含可能发生错误的代码,而 catchStatement 则包含了可处理任何发生的错误的代码。如果在 tryStatements 中发生了一个错误,则将把程序控制传递给 catchStatements 来处理该错误。exception 的初始值是发生在 tryStatements 中发生的错误的值。如果不发生错误,则不执行 catchStatements。
如果在与发生错误的 tryStatements 相关联的 catchStatements 中不能处理该错误,则使用 throw 语句将这个错误传播或重新引发给更高级的错误处理程序。
在执行完 tryStatements 中的语句,并在 catchStatements 的所有错误处理发生之后,可无条件执行 finallyStat ements 中的语句。
请注意,即使 try 或 catch 块中出现返回语句,或 catch 块中引发错误,都会执行 finallyStatements 中的代码。finallyStatments 一定会始终运行。
示例
下面的示例阐释了 JScript 异常处理是如何进行的。
try {
print("Outer ");
try {
print("Nested ");
throw "an error"; } catch(e) {
print("Nested catch caught " + e);
throw e + " re-thrown"; } finally {
print("Nested finally "); }} catch(e) {
print("Outer catch caught " + e);} finally {
print("Outer finally running");}
将生成以下输出:
Outer try running..Nested Nested catch caught an errorNested finally Outer catch caught a n error re-thrownOuter finally running
在 catch 块中可以使用 throw 语句再次引发已由 catch 语句捕获的异常。例如:
catch (InvalidCastException e)
{
throw (e); // Rethrowing exception e
}
如果要再次引发当前由无参数的 catch 子句处理的异常,则使用不带参数的 throw 语句。例如:
catch{
throw;}
C# 程序员参考
try-catch请参见
C# 关键字 | 与 C++ 比较 | 异常处理语句 | throw | try-finally | 引发异常 | C. 语法try-catch 语句由一个 try 块和其后所跟的一个或多个 catch 子句(为不同的异常指定处理程序)构成。此语句会采用下列形式之一:try t ry-block catch (exception-declaration-1) catch-block-1 catch (exception-declaration-2) catch-block-2 ...try try-bloc k catch catch-block
其中:
try-block 包含应引发异常的代码段。
exception-declaration, exception-declaration-1, exception-declaration-2 异常对象声明。
catch-block, catch-block-1, catch-block-2 包含异常处理程序。
C# 语言参考
try-catch(C# 参考)
try-catch 语句由一个 try 块后跟一个或多个 catch 子句构成,这些子句指定不同的异常处理程序。
try catch的使用方法备注
try 块包含可能导致异常的保护代码。该块一直执行到引发异常或成功完成为止。例如,下列强制转换 null 对象的尝试引发
object o2 = null;
try
{
int i2 = (int)o2; // Error
}
catch 子句使用时可以不带任何参数,这种情况下它捕获任何类型的异常,并被称为一般 catch 子句。它还可以接受从 System.Exception 派生的对象参数,这种情况下它处理特定的异常。例如:
catch (InvalidCastException e)
{
}
在同一个 try-catch 语句中可以使用一个以上的特定 catch 子句。这种情况下 catch 子句的顺序很重要,因为会按顺序检查 catch 子句。将先捕获特定程度较高的异常,而不是特定程度较小的异常。
在 catch 块中可以使用 throw 语句再次引发已由 catch 语句捕获的异常。例如:
catch (InvalidCastException e)
{
throw (e); // Rethrowing exception e
}
如果要再次引发当前由无参数的 catch 子句处理的异常,则使用不带参数的 throw 语句。例如:
catch
{
throw;
}
在 try 块内部时应该只初始化其中声明的变量;否则,完成该块的执行前可能发生异常。例如,在下面的代码示例中,变量 x 在 try 块内初始化。试图在 Write(x) 语句中的 try 块外部使用此变量时将产生编译器错误:使用了未赋值的局部变量。
static void Main()
{
int x;
try
{
// Don’t initialize this variable here.
x = 123;
}
catch
{
}
// Error: Use of unassigned local variable ’x’.
Console.Write(x);
}
有关 catch 块的更多信息,请参见 try-catch-finally。
NullReferenceException 异常:复制代码示例
在此例中,try 块包含对可能导致异常的 MyMethod() 方法的调用。catch 子句包含仅在屏幕上显示消息的异常处理程序。当从 MyMethod 内部调用 throw 语句时,系统查 catch 语句并显示 Exception caught 消息。
// try_catch_example.cs
using System;
class MainClass
{
static void ProcessString(string s)
{
if (s == null)
{
throw new ArgumentNullException();
}
}
static void Main()
{
try
{
string s = null;
ProcessString(s);
}
catch (Exception e)
{
Console.WriteLine("{0} Exception caught.", e);
}
}
}
示例输出
System.ArgumentNullException: V alue cannot be null.
at MainClass.Main() Exception caught.
此例使用了两个 catch 语句。最先出现的最特定的异常被捕获。
/
/ try_catch_ordering_catch_clauses.cs
using System;
class MainClass
{
static void ProcessString(string s)
{
if (s == null)
{
throw new ArgumentNullException();
}
}
static void Main()
{
try
{
string s = null;
ProcessString(s);
}
// Most specific:
catch (ArgumentNullException e)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论