首页 > 其他分享 >try…except语句

try…except语句

时间:2024-06-08 19:29:03浏览次数:6  
标签:语句 __ except try 苹果 异常

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm=1001.2014.3001.5501

在程序开发时,有些错误并不是每次运行都会出现。例如,实例01,只要输入的数据符合程序的要求,程序就可以正常运行,否则将抛出异常并停止运行。假设在输入苹果的数量时,输入了23.5,那么程序将抛出如图3所示的异常。

图3  抛出ValueError异常

这时,就需要在开发程序时对可以出现异常的情况进行处理。

在Python中,提供了try…except语句捕获并处理异常。在使用时,把可能产生异常的代码放在try语句块中,把处理结果放在except语句块中,这样,当try语句块中的代码出现错误时,就会执行except语句块中的代码,如果try语句块中的代码没有错误,那么except语句块将不会执行。具体的语法格式如下:

try:

    block1

except [ExceptionName [as alias]]:

    block2

参数说明:

l  block1:表示可能出现错误的代码块。

l  ExceptionName [as alias]:可选参数,用于指定要捕获的异常。其中,ExceptionName表示要捕获的异常名称,如果在其右侧加上as alias,则表示为当前的异常指定一个别名,通过该别名,可以记录异常的具体内容。

说明:在使用try…except语句捕获异常时,如果在except后面不指定异常名称,则表示捕获全部异常。

l  block2:表示进行异常处理的代码块。在这里可以输出固定的提示信息,也可以通过别名输出异常的具体内容。

说明:使用try…except语句捕获异常后,当程序出错时,输出错误信息后,程序会继续执行。

下面将对实例01进行改进,加入捕获异常功能,对除数不能为0的情况进行处理。

图标 (35)

  实例02  模拟幼儿园分苹果(除数不能为0)

在IDLE中创建一个名称为division_apple_0.py的文件,然后将实例01的代码全部复制到该文件中,并且对“if __name__ == '__main__':”语句下面的代码进行修改,应用try…except语句捕获执行division()函数可能抛出的ZeroDivisionError(除数为零)异常,修改后的代码如下:

def division():

    '''功能:分苹果'''

    print("\n===================== 分苹果了 =====================\n")

    apple = int(input("请输入苹果的个数:"))                      # 输入苹果的数量

    children = int(input("请输入来了几个小朋友:"))

    result = apple // children                                  # 计算每人分几个苹果

    remain = apple - result * children                          # 计算余下几个苹果

    if remain > 0:

        print(apple, "个苹果,平均分给", children, "个小朋友,每人分", result,

              "个,剩下", remain, "个。")

    else:

        print(apple, "个苹果,平均分给", children, "个小朋友,每人分", result, "个。")

if __name__ == '__main__':

    try:                                                       # 捕获异常

        division()                                         # 调用分苹果的函数

    except ZeroDivisionError:                                 # 处理异常

        print("\n出错了 ~_~ ――苹果不能被0个小朋友分!")

执行以上代码,输入苹果的数量为10,小朋友的人数为0时,将不再抛出异常,而是显示如图4所示的结果。

图4  除数为0时重新执行程序

目前,我们只处理了除数为0的情况,如果将苹果和小朋友的数量输入成小数或者不是数字会是什么结果呢?再次运行上面的实例,输入苹果的数量为2.7,将得到如图5所示的结果。

图5  输入的数量为小数时得到的结果

从图5中可以看出,程序中要求输入整数,而实际输入的是小数,则抛出ValueError(传入的值错误)异常。要解决该问题,可以在实例02的代码中,为try…except语句再添加一个except语句,用于处理抛出ValueError异常的情况。修改后的代码如下:

def division():

    '''功能:分苹果'''

    print("\n===================== 分苹果了 =====================\n")

    apple = int(input("请输入苹果的个数:"))               # 输入苹果的数量

    children = int(input("请输入来了几个小朋友:"))

    result = apple // children                            # 计算每人分几个苹果

    remain = apple - result * children                    # 计算余下几个苹果

    if remain > 0:

        print(apple, "个苹果,平均分给", children, "个小朋友,每人分", result,

              "个,剩下", remain, "个。")

    else:

        print(apple, "个苹果,平均分给", children, "个小朋友,每人分", result, "个。")

if __name__ == '__main__':

    try:                                               # 捕获异常

        division()                                    # 调用分苹果的函数

    except ZeroDivisionError:                         # 处理异常

        print("\n出错了 ~_~ ――苹果不能被0个小朋友分!")

    except ValueError as e:                              # 处理ValueError异常

        print("输入错误:", e)                            # 输出错误原因

再次运行程序,输入苹果的数量为小数时,将不再直接抛出异常,而是显示友好的提示,如图6所示。

图6  输入的数量为小数时显示友好的提示

多学两招:在捕获异常时,如果需要同时处理多个异常也可以采用下面的代码实现:

try:                                                     # 捕获异常

    division()                                            # 调用分苹果的函数

except (ValueError,ZeroDivisionError ) as e:             # 处理异常

print("出错了,原因是:",e)                            # 显示出错原因

即在except语句后面使用一对小括号将可能出现的异常名称括起来,多个异常名称之间使用逗号分隔。如果想要显示具体的出错原因,那么再加上as指定一个别名。

标签:语句,__,except,try,苹果,异常
From: https://blog.csdn.net/weixin_67859959/article/details/139455042

相关文章

  • Docker中部署nacos报Caused by: java.lang.IllegalStateException: No DataSource set
    在进入nacos日志内部发现再次重启同样如此;其实从上面你也就很容易看出问题所在,没有数据;经过排查发现我在docker部署时之前部署的mysql容器并没有启动,需要启动mysql容器z输入两个命令分别启动和查看dockerstartmysqldps经过之后再次重启nacos进入日志后成功:​​​​​......
  • C++ -- noexcept关键字
    C++--noexcept关键字noexcept关键字作用:告诉编译器,函数中不会发生异常,有利于编译器对程序做出更多的优化,比如避免生成处理异常的额外代码,减少程序的大小例子声明了noexcept和没有声明的同一段代码:safeDivide当除数为0时,会直接调用std::terminate()来中止程序而不是throw......
  • 264 Exception Handling Middleware
    示例CRUDExample项目新建Middlewares文件夹,下面新建ExceptionHandlingMiddleware.cs(VS中有Middleware模板)usingMicrosoft.AspNetCore.Builder;usingMicrosoft.AspNetCore.Http;usingSerilog;usingSystem.Threading.Tasks;namespaceCRUDExample.Middlewares{ ......
  • 265 Custom Exceptions(更容易定位报错内容具体是什么)
    优势CustomExceptions相比于ArgumentException/ArgumentNullException,更容易定位报错内容具体是什么,报错内容与具体业务相关。示例新建类库项目Exceptions,为Services/CRUDExample项目添加Exceptions项目引用Exceptions项目中添加InvalidPersonIdException.csnamespac......
  • 微前端学习笔记(5):从import-html-entry发微DOM/JS/CSS隔离
    import-html-entry 是qiankun中一个举足轻重的依赖,用于获取子应用的HTML和JS,同时对HTML和JS进行了各自的处理,以便于子应用在父应用中加载。 import-html-entry主要是实现了以下几个能力拉取url对应的html并且对html进行了一系列的处理拉取上述html中所......
  • js中try中定义的数据catch无法访问
    如果你在try块中定义了一个变量,但在catch块中访问时得到undefined,这可能是因为以下几个原因:变量作用域问题:如果在try块中使用let或const声明了变量,这些变量只在try块内部可见(即具有块级作用域)。当控制权转移到catch块时,这些变量就不可见了,因此尝试访问它们会得到undefined。但根......
  • try-catch VS try-catch-finally
    try-catch和try-catch-finally是Java中用于异常处理的两种基本结构,它们的主要区别在于资源管理和流程控制上。try-catch功能:主要用于捕获并处理代码块中可能发生的异常。当try块中的代码执行时遇到异常,对应的catch块将被执行,处理异常。特点:如果try块没有抛出任何异常,......
  • msSQL 语句查询时 charindex()方法的妙用
    CHARINDEX(expressionToFind,expressionToSearch[,start_location])参数说明:expressionToFind:必需,要查找的字符串。expressionToSearch:必需,要进行查找的字符串表达式。start_location:可选,指定搜索的起始位置,默认为1。如果指定了起始位置,则从该位置开始搜索。list变......
  • Modbus.SlaveException
    Modbus.SlaveException是一个在Modbus通信协议中表示从机(Slave)错误的异常。Modbus是一种用于工业自动化领域的应用层协议,它允许控制器与设备(如PLC、传感器等)进行通信。在Modbus协议中,从机是指连接到Modbus网络上的设备,它们响应主控器(通常是PC或其他控制设备)的请求。......
  • Yii2 框架中,通过 yii\db\Command 对象来执行原生 SQL 语句
    在Yii2中,你可以通过yii\db\Command对象来执行原生SQL语句。这包括查询操作(如SELECT)和数据操作(如INSERT、UPDATE、DELETE)。以下是一些常见的例子,展示如何在Yii2中执行SQL语句。执行查询语句执行SELECT查询并获取结果你可以使用queryAll()、queryOne()、queryColu......