day20 python
 
一.异常处理
    1.什么是异常, 常见异常有:
        逻辑错误
'''
name
Traceback (most recent call last):                  #问题的回溯, 定位你的问题是在哪个位置发生的: 哪个文件, 哪个行, 哪个代码
  File "C:/Users/THINKPAD/PycharmProjects/s15/day01/practice.py", line 3038, in <module>
    name
NameError: name 'name' is not defined                #错误类型, 错误类型是有限的: 具体的错误提示
'''
 
[][1]           #IndexError: list index out of range
{}['key']       #KeyError: 'key'
import bajie    #ModuleNotFoundError: No module named 'bajie'
int('bajie')    #ValueError: invalid literal for int() with base 10: 'bajie'
        
        语法错误: 写代码的时候就要规避掉
if          #SyntaxError: invalid syntax
    
    2.什么时候最容易出异常, 当你处理的内容不确定的时候
        有用户参与
        有外界数据介入的: 比如从文件中读取, 从网络上获取
    3.异常的所有种类
    4.异常报错,追溯有很多行报错时:
        是什么原因的多行报错: 多层嵌套调用的过程中, 如果内部的代码出了问题, 外部所有调用的地方都会成为报错追溯信息的一部分
        如何解决: 看报错的最后一样, 如果有源码文件, 那么从下往上找, 找到自己写的代码, 然后排查
def func1():
    name
def func2():
    func1()
def main():
    func2()
main()
 
    5.什么是异常, 异常发生后, 代码就不执行了(程序崩溃)
    6.什么是异常处理:
        python解释器检测到错误, 触发异常(也允许程序员自己触发异常)
        程序员编写特定的代码, 专门来捕捉这个异常
        如果捕捉成功则进入另外一个分支, 执行你为其定制的逻辑, 是程序不会崩溃, 这就是异常处理
lst = [1,2,3]
try:
    num = int(input('(0/1/2): '))     #被异常处理机制包围的代码
    print(lst[num])
except ValueError:                  #except处理的异常必须和实际报错的异常一样才能处理
    print('please input a int')
except IndexError:                  #可以写多个except: 叫多分支.程序从上到下只要找到一个except, 下面的就不会找了
    print('0/1/2 ok?')
        
        多分支的合并
lst = [1,2,3]
try:
num = int(input('(0/1/2): '))
print(lst[num])
except (ValueError, IndexError) as e:   #保留系统的Error原因到变量e中
print('Error: %s' % e)
        
        万能异常: 等你所有的程序都开发完了, 你才开始用万能异常(也可以给整个函数加万能异常)
            as 能将具体错误原因打印出来
try:
    num = int(input('(0/1/2): '))
except Exception as e:
    print('Error: %s' % e)
        
        万能异常
try:
    num = int(input('(0/1/2): '))
except:
    print('Error: %s')
 
 
二.else分支与finally分支
try:
    print('aaa')
    name
except Exception as e:
    print('error: %s' % e)
else:
    print('no error')                #当try没有发异常时, else分支才执行, 否则不执行
finally:
    print('my name is bajie')         #爱谁谁, 最后总执行(就算你有异常, 也要等我执行完, 程序才能退出),try中有return, 我也要执行完再return
 
with open('filename', mode='r') as f:   #with也可以自动关文件, 但是这个据说有三个异常处理不了, 文件就没法关, 所以finally比较强大
    f.readline()
    
    异常处理的组合: else必须要有except
try ... except ...
try ... except ...except ...
try ... except ... else...
try ... except ... finally ...
try ... except ... else ... finally ...
try ... finally ...
 
三.主动抛出异常
raise ValueError                                        #你不能给用户抛异常
raise ValueError('you are error on this line')                #是用来给程序员抛异常的
 
四.断言
assert True             #assert 后面跟的是bool类型的东西, 条件满足往下执行
print('bajie')
assert False            #assert 后面跟的是bool类型的东西, 条件不满足往下的都不执行, 而且会抛出AssertionError
print('wukong')
assert True             
print('datang')
 
五.自定义异常(面向对象之才能做)
 
六.异常处理的忠告: 没有开发完成不能在最后的main()外加异常, 要在具体可能发生的语句上加异常
 
 
 
 
 
 
 
 
 
 

最新文章

  1. UVA 11609 - Teams(二项式系数)
  2. Android RSA加密解密
  3. numpy——linspace创建等差数列
  4. jfinal 基本应用 --定时任务 QuartzPlugin
  5. ArcGIS Engine开发的ArcGIS 版本管理的功能
  6. 认真学习shell的第一天-数学运算
  7. 一个完整的ansible实施目录示例
  8. c语言中文件相关操作
  9. window下如何搭建linux环境
  10. Redshift扩容及踩到的坑
  11. 2017ecjtu-summer training #6 Gym 100952D
  12. 儿童节,我们从零开始——Python入门资源推荐
  13. Dynamics CRM 开启图表的3D效果展示
  14. 如何在React项目中直接使用WebAssembly
  15. gulp在项目中的基本使用
  16. input file禁用手机本地文件选择,只允许拍照上传图片
  17. Use Dynamic Data Masking to obfuscate your sensitive data
  18. zookeeper(5)--基于watcher原理实现带注册中心的RPC框架
  19. C++调用IDL程序的做法(三)
  20. J2EE开发之三种项目架构

热门文章

  1. springboot logback 配置 通配符不行就这样
  2. Delphi GridPanel Percent百分比设置
  3. linux运维、架构之路-linux磁盘管理
  4. BZOJ 1596: [Usaco2008 Jan]电话网络 树形DP
  5. java.lang.unsatisfiedLinkError:找不到指定的程序
  6. Eclipse中安装和使用FindBugs
  7. jstl学习资料
  8. (转)原理到实现 | K8S 存储之 NFS
  9. Centos7.6 安装
  10. idhttpserver 下载文件