day21 03 异常处理

1.什么是异常

异常:程序运行时发生错误的信号

错误:语法错误(一般是不能处理的异常)

逻辑错误(可处理的异常)

特点:程序一旦发生错误,就从错误的位置停下来,不再继续执行后面的内容

2.怎么处理异常呢?

比如下面类型代码的异常:

ret=int(input('number >>>'))
print(ret*'*')

如果执行后用户输入的不是数据就会报错:

number >>>a
Traceback (most recent call last):
File "<encoding error>", line 1, in <module>
ValueError: invalid literal for int() with base 10: 'a'

可以看到这个错误类型是:ValueError

处理的方法:

try:#异常处理语句
ret=int(input('number >>>'))#把认为有异常错误需要处理的内容放在try.....except 错误类型的机制里面
print(ret*'*')
except ValueError:#捕获错误的类型 异常处理语句,只能处理对应的错误
print('您输入的内容错误,请输入一个数字')

当再次输入错误的内容时,它不会标红报错,而是给你提示,就显得比较友好:

number >>>a
您输入的内容错误,请输入一个数字

使用try和except就能处理异常:

try是我们要处理的代码,从前面开始执行,如果有多个错误,遇到第一个错误时就停止了,后面的错误就不会处理了

except后面跟一个错误类型,当代码发生错误且错误类型符合的时候,就会执行except中的代码

except是支持多分支

有没有一个能处理所有错误的类型万能机制:Exception:

只告诉了在哪里错了,但是你不知道在哪里出错了,比较笼统

所以有了这个万能处理机制,仍需要把能预测到的问题单独处理

单独处理的所有内容都应该写在万能异常之前

try:
print('')
1/0
[][3]
int('a')
{}['key']
print('')
ret=int(input('number >>>'))
print(ret*'*')
except Exception:
print('你错了,老铁')
except ValueError:
print('您输入的内容错误,请输入一个数字')
#如果将这个分支放到万能异常的后面,如果有错误,就会先找到万能异常机制,就不会走下面分支了,
# 也就不会具体提醒了,即这个分支也就失效了
111
你错了,老铁

如果将分支机制放在万能机制的前面,当try里面真的有分支对应的错误类型的时候就会具体给出提示

else:没有异常执行else里面的代码

try:
ret=int(input('number >>>'))
print(ret*'*')
except ValueError:
print('您输入的内容错误,请输入一个数字')
except KeyError:
print('请输入正确的格式')
except Exception:
print('你错了,老铁')
else:
print('没有异常的时候执行else里面的代码')

假如输入一个正确的:

number >>>5
*****
没有异常的时候执行else里面的代码

finally:不管代码是否异常,都会执行

try:
ret=int(input('number >>>'))
print(ret*'*')
except ValueError:
print('您输入的内容错误,请输入一个数字')
except KeyError:
print('请输入正确的格式')
except Exception:
print('你错了,老铁')
else:
print('没有异常的时候执行try里面的代码')
finally:
print('====')

假如输入一个正确的:

number >>>10
**********
没有异常的时候执行try里面的代码
====

输入一个错误的:

number >>>a
您输入的内容错误,请输入一个数字
==== #输入的a不符合还是会执行

day21 03 异常处理的更多相关文章

  1. 《Head First Python》学习笔记03 异常处理

    异常(运行时错误): 当代码逻辑遇到意外事件时,比如打开一个文件,却发现文件不存在.这时是增加额外的代码处理逻辑,还是捕获异常呢?答案是:Python优先推荐捕获异常,然后恢复. Python异常机制 ...

  2. day21 模块 异常处理

    常用模块:http://www.cnblogs.com/Eva-J/articles/7228075.html 今日概要: #time # —— 时间:时间戳 字符串 结构化时间 #collectio ...

  3. day 21 03 补全异常处理

    day 21 03  异常处理(补全) 1.异常处理的整体几个语句: try: .......#有可能出错的代码 ret=int(input('number >>>')) print ...

  4. C++11异常处理 noexcept

    1.简介 在C语言中,如果程序的运行出现异常.错误,我们想提供方案处理这些异常时,我们面临许多问题,如: (1)C语言没有提供统一(标准)的方式来处理错误: (2)无法保证错误会被正确的处理: (3) ...

  5. Java异常处理:给程序罩一层保险

    文/沉默王二 人这一生,总会遇到一些不可预料的麻烦,这些麻烦可能会让我们遭受沉重的打击.为了减轻因此承受的负担,我们就会买保险. 本着负责任的态度,我们程序员在写代码的时候,都非常的严谨.但程序在运行 ...

  6. Oracle-14:PLSQL

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- PL/SQL PL/SQL(Procedural Language):过程化sql语言! 在原本的sql语句之 ...

  7. day21:包和异常处理

    1,复习 # 序列化模块 # json # dumps # loads # dump 和文件有关 # load load不能load多次 # pickle # 方法和json的一样 # dump和lo ...

  8. day21双下方法,源码相关,异常处理

    #!/usr/bin/env python# -*- coding:utf-8 -*- # 1.列举你了解的面向对象中的特殊成员,并为每个写代码示例.'''__init__初始化:class A: d ...

  9. 一步一步搭框架(asp.netmvc+easyui+sqlserver)-03

    一步一步搭框架(asp.netmvc+easyui+sqlserver)-03 我们期望简洁的后台代码,如下: using System; using System.Collections.Gener ...

随机推荐

  1. JAVA启动参数三:非Stable参数

    前面我们提到用-XX作为前缀的参数列表在jvm中可能是不健壮的,SUN也不推荐使用,后续可能会在没有通知的情况下就直接取消了:但是由于这些参数中的确有很多是对我们很有用的,比如我们经常会见到的-XX: ...

  2. Java Annontation(注解)详解

    java中经常用到注解(Annontation),索性整理了下关于注解的相关知识点: 一.概念 Annontation是Java5开始引入的新特征,类似与.NET 中的attribute.中文名称一般 ...

  3. 利用正则将xml数据解析为数组

    function xml_to_array( $xml ) { $reg = '/<(\w+)[^>]*>([\x00-\xFF]*)<\/\1>/'; if(preg_ ...

  4. windows系统下如何正确安装Cygwin(图文详解)

    我的操作系统信息是 1.在官网https://cygwin.com/install.html下载win64位安装包 选择包的下载存放目录,点击“下一步”   为了使我们安装的Cygwin能够编译程序, ...

  5. ADO.net数据访问

    需要引用对应命名空间:System.Data.SqlClient; SqlConnection:连接对象SqlCommand:命令对象SqlDataReader:读取器对象 //造连接字符串 stri ...

  6. Zclip点击复制内容到剪贴板兼容各浏览器

    WEB开发中,要让用户复制页面中的一段代码.URL地址等信息,为了避免用户拖动鼠标再进行右键复制操作而可能出现的差错,我们可以直接在页面中放置一个复制按钮,只需要轻轻一点这个复制按钮,内容将会被复制, ...

  7. Apollo源码搭建调试看一文就够

    Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境.不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限.流程治理等特性,适用于微服务配置管理场景. 我 ...

  8. 第一次阅读作业 xinzcover

    ---恢复内容开始--- 第一次阅读和准备作业 这个作业属于哪个课程 https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass1 这个作 ...

  9. MongoDB入门解析

    刚开始学习mongodb,对笔记做了一个整理.是基于nodejs来学习的. 1.mongodb介绍 mongodb 是C++语言编写的,是一个基于分布式文件存储的开源数据库系统. 在高负载的情况下,添 ...

  10. 中国版 Office 365 (X-Tenant / Tango) 功能验证报告 - 2 基本步骤

    说明: 1. 前期准备 - 在Azure上模拟出生产环境: 包括父域域控.子域域控.父域的Exchange Server.子域的Exchange Server.对Exchange Server, 需要 ...