博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
异常处理
阅读量:4632 次
发布时间:2019-06-09

本文共 3458 字,大约阅读时间需要 11 分钟。

一、前言

  在编程过程中为了增加友好性,在程序出现bug时一般不会将错误信息显示给用户,而是现实一个提示的页面,通俗来说就是不让用户看见大黄页!!!

二、用法

2.1 基本格式

try:    passexcept Exception as e:    pass

2.2 捕获一个异常 

  我们在代码运行前,预知会发生一些错误/异常,将其捕获不至于程序运行崩溃。

names = ['Tom', 'Jerry']try:    names[3]except IndexError as e:    print('Index错误:', e)#输出Index错误: list index out of range

2.3 多个异常错误

  如果我们的代码在运行时,会有多个异常错误,可以都写出了

names = ['Tom', 'Jerry']data = {    'name': 'bigberg'}try:    print(names[1])    print(data['age'])except IndexError as e:    print('Index错误:', e)except KeyError as e:    print("没有这个Key:", e)#输出Jerry没有这个Key: 'age'

  这个捕获异常是从上往下,如果上面有错误,就会触发捕获异常,不会继续捕获下面的错误。

2.4 将多个异常写在一起

  有时候每个异常就写一个except会显得麻烦,可以写在一起

names = ['Tom', 'Jerry']data = {    'name': 'bigberg'}try:    print(names[2])    print(data['age'])except (IndexError, KeyError) as e:    print('异常错误:', e)# 输出异常错误: list index out of range

  这样写起来虽然简单了,但是不能清晰的显示具体哪里出现了错误

2.5 统一捕获所有异常(Exception)

  绝大部分异常错误都可以捕获 

names = ['Tom', 'Jerry']data = {    'name': 'bigberg'}try:    print(names[1])    print(data['name'])    for i in range(len(name)):        passexcept IndexError as e:    print('Index错误:', e)except KeyError as e:    print("没有这个Key:", e)except Exception as e:    print("错误:", e)# 输出Jerrybigberg错误: name 'name' is not defined

2.6 else:没有捕捉到异常,一切正常

names = ['Tom', 'Jerry']data = {    'name': 'bigberg'}try:    print(names[1])    print(data['name'])    for i in range(len(names)):        passexcept IndexError as e:    print('Index错误:', e)except KeyError as e:    print("没有这个Key:", e)except Exception as e:    print("错误:", e)else:    print('一切OK')#输出Jerrybigberg一切OK

2.7 finally:不管有没有异常,都执行

names = ['Tom', 'Jerry']data = {    'name': 'bigberg'}try:    print(names[1])    print(data['age'])    for i in range(len(names)):        passexcept IndexError as e:    print('Index错误:', e)except KeyError as e:    print("没有这个Key:", e)except Exception as e:    print("错误:", e)else:    print('一切OK')finally:    print("---------------")    print('不管有没有错误,都执行')    print('我在finally里,被执行了')#输出Jerry没有这个Key: 'age'---------------不管有没有错误,都执行我在finally里,被执行了

三、自定义异常

class MyException(Exception):    def __init__(self, msg):        self.message = msg    def __str__(self):        return self.messagetry:    raise MyException("施主你与我佛无缘,还是请回吧!")   # 写入错误信息except MyException as e:    print(e)

四、异常种类

1 AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x 2 IOError 输入/输出异常;基本上是无法打开文件 3 ImportError 无法引入模块或包;基本上是路径问题或名称错误 4 IndentationError 语法错误(的子类) ;代码没有正确对齐 5 IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5] 6 KeyError 试图访问字典里不存在的键 7 KeyboardInterrupt Ctrl+C被按下 8 NameError 使用一个还未被赋予对象的变量 9 SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了)10 TypeError 传入对象类型与要求的不符合11 UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,12 导致你以为正在访问它13 ValueError 传入一个调用者不期望的值,即使值的类型是正确的14 15 常用异常
View Code
ArithmeticErrorAssertionErrorAttributeErrorBaseExceptionBufferErrorBytesWarningDeprecationWarningEnvironmentErrorEOFErrorExceptionFloatingPointErrorFutureWarningGeneratorExitImportErrorImportWarningIndentationErrorIndexErrorIOErrorKeyboardInterruptKeyErrorLookupErrorMemoryErrorNameErrorNotImplementedErrorOSErrorOverflowErrorPendingDeprecationWarningReferenceErrorRuntimeErrorRuntimeWarningStandardErrorStopIterationSyntaxErrorSyntaxWarningSystemErrorSystemExitTabErrorTypeErrorUnboundLocalErrorUnicodeDecodeErrorUnicodeEncodeErrorUnicodeErrorUnicodeTranslateErrorUnicodeWarningUserWarningValueErrorWarningZeroDivisionError更多异常
View Code

 

转载于:https://www.cnblogs.com/bigberg/p/7681034.html

你可能感兴趣的文章
ASP.NET 页面之间传值的几种方式
查看>>
华为笔试(1)
查看>>
Python小程序collatz
查看>>
功能键1,输出所有所查信息的记录
查看>>
简单模拟flume
查看>>
SQL Server 事务日志文件已满,收缩日志文件(9002)
查看>>
分享一款在线贝塞尔曲线调试器
查看>>
职责链模式
查看>>
[Selenium]对弹出的Alert窗口进行操作
查看>>
C# 进制转换
查看>>
C中级 MariaDB Connector/C API 编程教程
查看>>
C 中级 - SO_REUSEPORT 和 SO_REUSEADDR
查看>>
网络配置:linux学习第一篇
查看>>
多域名同一个IP在IIS环境下架设多个网站 主机头
查看>>
Python学习之路!!!之整数、字符串介绍
查看>>
Mysql授权远程登录
查看>>
java4中创建内对象的方法
查看>>
使用Docker Swarm搭建分布式爬虫集群
查看>>
脚踏实地学C#3-装箱和拆箱
查看>>
Dubbo定义及其作用
查看>>