12.异常捕获

12.异常捕获


12.1 知识点

异常捕获的作用

通过异常捕获的学习,可以避免当代码报错时造成程序卡死的情况。在某些情况下,用户的输入或其他外部因素可能导致代码出现异常,为了确保程序的稳定性和可靠性,我们可以使用异常捕获机制。

示例

// 将玩家输入的内容存储在string类型的变量(容器)中
string str = Console.ReadLine();

try
{
    // Parse转字符串为数值类型时,必须要合法合规,否则报错
    // 输入中文时、非整形数字时或数字超出范围时会卡死
    int i = int.Parse(str);

    // 其他可能引起异常的代码逻辑
    // ...
}
catch
{
    // 如果出错了,会执行catch中的代码来捕获异常
    // 可以加上参数 catch(Exception e) 具体报错跟踪,通过e得到具体的错误信息
    Console.WriteLine("请输入合法数字");
}
finally
{
    // 最后执行的代码,不管有没有出错,都会执行其中的代码
    // 目前,大家可以不用写
    Console.WriteLine("执行完毕");
}

基本语法

//必备部分 
try
{
    //希望进行异常捕获的代码块
    //放到try中 
    //如果try中的代码 报错了 不会让程序卡死
}
catch
{
    //如果出错了 会执行 catch中的代码 来捕获异常
    //可以加上参数 catch(Exception e) 具体报错跟踪 通过e得到 具体的错误信息
}
//可选部分
finally
{
    //最后执行的代码 不管有没有出错 都会执行其中的代码
    //目前 大家可以不用写
}
//注意:异常捕获代码基本结构中 不需要加; 在里面去写代码逻辑时  每一句代码才加;

注意

  • 异常捕获代码基本结构中不需要加分号;,在里面写代码逻辑时,每一句代码才加分号;
  • try块中,如果有多行代码,每行后面需要加分号;

实践

try
{
    string str1 = Console.ReadLine();
    int i1 = int.Parse(str1);
    Console.WriteLine(i1);
    // 其他可能引起异常的代码逻辑
    // ...
}
catch
{
    // try中输入非法数字会进到这
    Console.WriteLine("请输入合法数字");
}
finally
{
    // 无论是否合法都能进到这
    Console.WriteLine("执行完毕");
}

以上实践示例中,如果用户输入的字符串无法成功转换为整数,将会执行catch块中的代码,输出提示信息。最终,不管是否发生异常,都会执行finally块中的代码,确保资源的正确释放。


12.2 知识点代码

using System;

namespace Lesson09_异常捕获
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("异常捕获");

            #region 知识点一 作用
            //通过对异常捕获的学习 可以避免当代码报错时 造成程序卡死的情况

            //示例
            //将玩家输入的内容 存储 string类型的变量(容器)中
            string str = Console.ReadLine();

            //Parse转字符串为 数值类型时  必须 要合法合规 否则报错
            //输入中文时或非整形数字时或数字超出范围时会卡死
            int i = int.Parse(str);

            #endregion

            #region 知识点二 基本语法

            //必备部分 
            try
            {
                //希望进行异常捕获的代码块
                //放到try中 
                //如果try中的代码 报错了 不会让程序卡死
            }
            catch
            {
                //如果出错了 会执行 catch中的代码 来捕获异常
                //可以加上参数 catch(Exception e) 具体报错跟踪 通过e得到 具体的错误信息
            }
            //可选部分
            finally
            {
                //最后执行的代码 不管有没有出错 都会执行其中的代码
                //目前 大家可以不用写
            }
            //注意:异常捕获代码基本结构中 不需要加; 在里面去写代码逻辑时  每一句代码才加;

            #endregion

            #region 知识点三 实践
            try
            {
                string str1 = Console.ReadLine();
                int i1 = int.Parse(str1);
                Console.WriteLine(i);
                //.......
            }
            catch
            {
                //try中输入非法数字会进到这
                Console.WriteLine("请输入合法数字");
            }
            finally
            {
                //无论是否合法都能进到这
                Console.WriteLine("执行完毕");
            }
            #endregion
        }
    }
}

12.3 练习题

请用户输入一个数字,如果输入有误,则提示用户输入错误

try
{
    string str = Console.ReadLine();
    long l = long.Parse(str);
    Console.WriteLine("你输入的数字为:" + l);
}
catch
{
    Console.WriteLine("您的输入有误");
}

提示用户输入姓名、语文、数学、英语成绩。如果输入的成绩有误,则提示用户输入错误。否则将输入的字符串转为整形变量存储

方法一

try
{
    Console.WriteLine("请输入用户名");
    string yourName = Console.ReadLine();

    Console.WriteLine("请输入语文成绩");
    int yuWen = int.Parse(Console.ReadLine());

    Console.WriteLine("请输入数学成绩");
    int shuXue = int.Parse(Console.ReadLine());

    Console.WriteLine("请输入英语成绩");
    int yingYu = int.Parse(Console.ReadLine());
}
catch
{
    Console.WriteLine("你的输入不合法,成绩请输入数字");
}

方法二

try
{
    Console.WriteLine("请输入用户名");
    string yourName = Console.ReadLine();

    Console.WriteLine("请输入语文成绩");
    int yuWen = int.Parse(Console.ReadLine());
}
catch
{
    Console.WriteLine("语文成绩输入格式不正确");
}

try
{
    Console.WriteLine("请输入数学成绩");
    int shuXue = int.Parse(Console.ReadLine());
}
catch
{
    Console.WriteLine("数学成绩输入格式不正确");
}

try
{
    Console.WriteLine("请输入英语成绩");
    int yingYu = int.Parse(Console.ReadLine());
}
catch
{
    Console.WriteLine("英语成绩输入格式不正确");
}

12.4 练习题代码

using System;

namespace Lesson09_练习题
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("异常捕获练习题");

            #region 练习题一
            //请用户输入一个数字
            //如果输入有误,则提示用户输入错误
            try
            {
                string str = Console.ReadLine();
                long l = long.Parse(str);
                Console.WriteLine("你输入的数字为:" + l);
            }
            catch
            {
                Console.WriteLine("您的输入有误");
            }
            #endregion

            #region 练习题二
            //提示用户输入姓名、语文、数学、英语成绩
            //如果输入的成绩有误,则提示用户输入错误
            //否则将输入的字符串转为整形变量存储



            try
            {
                Console.WriteLine("请输入用户名");
                string yourName = Console.ReadLine();
                Console.WriteLine("请输入语文成绩");
                string yuWenStr = Console.ReadLine();
                int yuWen = int.Parse(yuWenStr);
                Console.WriteLine("请输入数学成绩");

                //一步到位的写法
                int shuXue = int.Parse(Console.ReadLine());

                Console.WriteLine("请输入英语成绩");
                int yingYu = int.Parse(Console.ReadLine());
            }
            catch
            {
                Console.WriteLine("你的输入不合法,成绩请输入数字");
            }



            try
            {
                Console.WriteLine("请输入用户名");
                string yourName = Console.ReadLine();
                Console.WriteLine("请输入语文成绩");
                string yuWenStr = Console.ReadLine();
                int yuWen = int.Parse(yuWenStr);
            }
            catch
            {
                Console.WriteLine("语文成绩输入格式不正确");
            }

            try
            {
                Console.WriteLine("请输入数学成绩");
                //一步到位的写法
                int shuXue = int.Parse(Console.ReadLine());
            }
            catch
            {
                Console.WriteLine("数学成绩输入格式不正确");
            }


            try
            {
                Console.WriteLine("请输入英语成绩");
                int yingYu = int.Parse(Console.ReadLine());
            }
            catch
            {
                Console.WriteLine("英语成绩输入格式不正确");
            }



            #endregion
        }
    }
}


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏