异常处理:
  一、语法错误

  二、逻辑错误

为什么要进行异常处理?

  python解释器执行程序时,检测到一个错误,出发异常,异常没有被处理的话,程序就在当前异常处终止,后面的代码不会运行  

l = ['login','register']
for num,i in enumerate(l,1):
print(num,i) try: 处理异常用try
num = int(input('num >>>')) 中间时可能出现错误的代码
print(l[num - 1])
except (ValueError,IndexError) : 可能出现的两种错误
print('您输入的内容不合法')

万能异常处理:

try:
pass
except (ValueError,IndexError):
print('针对性的处理')
except Exception as e: 万能异常处理
print(e)   打印异常的错误类型
print('通用性的处理')
# by luffycity.com
# 什么是异常
# IndexError [][1]
# KeyError {}['key']
# pickle.load() EOFError
# FileNotFoundError open('aa')
# ModuleNotFoundError import aaaaaaaaaaa
# ValueError int('sdjkhf') # 语法错误 应该在写代码的时候就规避掉
# SyntaxError
# NameError name # 什么时候最容易出异常
# 当你要处理的内容不确定的时候
# 有用户参与
# 有外界数据接入 : 从文件中读 从网络上获取 # 当有多行报错的时候是为什么?
# def func1():
# name
#
# def func2():
# func1()
#
# def main():
# func2()
#
# main()
# 在嵌套调用的过程中,内部的代码出了问题,外部所有的调用的地方都成为报错追溯信息的一部分 # 怎么解决
# 从下往上找 首先找到你写的代码 出错的那一行
# 看看能不能看出问题
# 就把报错的最后一行 错误类型和详细提示贴到百度里,结合报错的那一行解决问题 # 单分支
# l = ['login','register']
# for num,i in enumerate(l,1):
# print(num,i)
#
# try:
# num = int(input('num >>>'))
# print(l[num - 1])
# except ValueError : # except处理的异常必须和实际报错的异常是相同的
# print('请输入一个数字')
# print(l[num - 1]) # 多分支
# l = ['login','register']
# for num,i in enumerate(l,1):
# print(num,i)
#
# try:
# num = int(input('num >>>'))
# print(l[num - 1])
# except ValueError :
# # 从上向下报错的代码只要找到一个和报错类型相符的分支就执行这个分支中的代码,然后直接退出分支
# print('请输入一个数字')
# except IndexError :
# # 如果找不到能处理和报错类型相同的分支,会一直往下走,最后还是没有找到就会报错
# print('只能输入1或2') # 多分支合并
# l = ['login','register']
# for num,i in enumerate(l,1):
# print(num,i)
#
# try:
# num = int(input('num >>>'))
# print(l[num - 1])
# except (ValueError,IndexError) :
# print('您输入的内容不合法') # 万能异常
# def buy():
# print('buy')
# name
#
# def back():
# print('back')
# [][1]
#
# def show():
# print('show')
# 1/0
#
# def main():
# l = [('购物',buy),('退货',back),('查看订单',show)]
# while True:
# for num,i in enumerate(l,1):
# print(num,i[0])
# num = int(input('num >>>'))
# print(l[num - 1])
# try:
# func = l[num - 1][1]
# func()
# except Exception:
# print('用户在选择了%s操作之后发生了不可知的异常' % l[num - 1][0])
#
# main() # as语法 能够将具体错误信息打印出来
# def buy():
# print('buy')
# name
#
# def back():
# print('back')
# [][1]
#
# def show():
# print('show')
# 1/0
#
# def main():
# l = [('购物',buy),('退货',back),('查看订单',show)]
# while True:
# for num,i in enumerate(l,1):
# print(num,i[0])
# num = int(input('num >>>'))
# print(l[num - 1])
# try:
# func = l[num - 1][1]
# func()
# except Exception as e:
# print(e)
# #print(e.args,e.__traceback__.tb_lineno,e.__traceback__.tb_frame)
# print('用户在选择了%s操作之后发生了不可知的异常' % l[num - 1][0])
#
# main() # 万能异常,相当于except Exception
# try:
# name
# [][1]
# int('aaa')
# except:
# print(123) # 多分支 + 万能异常 : 万能异常应该永远放在异常处理的最下面
# def buy():
# print('buy')
# name
#
# def back():
# print('back')
# [][1]
#
# def show():
# print('show')
# 1/0
#
# def main():
# l = [('购物',buy),('退货',back),('查看订单',show)]
# while True:
# for num,i in enumerate(l,1):
# print(num,i[0])
# try:
# num = int(input('num >>>'))
# print(l[num - 1])
# func = l[num - 1][1]
# func()
# except (ValueError,IndexError) :
# print('您输入的内容不合法')
# except Exception as e:
# print(e)
# #print(e.args,e.__traceback__.tb_lineno,e.__traceback__.tb_frame)
# print('用户在选择了%s操作之后发生了不可知的异常' % l[num - 1][0])
# main() try:
pass
except (ValueError,IndexError):
print('针对性的处理')
except Exception as e:
print(e)
print('通用性的处理')

异常其它处理:

except NameError:   # 网络不稳定,邮箱地址错误
print('name error')
except IndexError:
print('index error')
except Exception as e:
print('Exception')
else: # 当try中的代码不发生异常的时候 走else分支 如果发送成功了 进行一些处理
print('else')
finally: # 无论如何都会被执行  
print('finally')

finally 应用

try:
f = open('www','w')
f.read()
finally: # 即使遇到报错,程序结束,也会先执行finally中的代码,然后再结束程序
f.close()
print('文件已经关闭了')
# finally用来回收一些操作系统的资源 : 数据库连接 打开的文件句柄 网络连接
异常处理的几种情况
try ... except
try ... except ... else
try ... finally
try ... except ... finally
try ... except ... else ... finally

  

主动抛出异常:

  raise ValueError

主动异常
 # by luffycity.com
# else分支
# try:
# print('aaa') # 给某某某发邮件
# # name
# # [][1]
# # 1/0
except NameError: # 网络不稳定,邮箱地址错误
print('name error')
except IndexError:
print('index error')
except Exception as e:
print('Exception')
else: # 当try中的代码不发生异常的时候 走else分支 如果发送成功了 进行一些处理
print('else') # finally分支
# try:
# print('aaa') # 给某某某发邮件
# name
# # [][1]
# # 1/0
# except NameError: # 网络不稳定,邮箱地址错误
# print('name error')
# except IndexError:
# print('index error')
# except Exception as e:
# print('Exception')
# else: # 当try中的代码不发生异常的时候 走else分支 如果发送成功了 进行一些处理
# print('else')
finally: # 无论如何都会被执行
print('finally') # def func():
# f = open('file')
# try:
# while True:
# for line in f:
# if line.startswith('a'):
# return line
# except:
# print('异常处理')
# finally: # 即使return也会先执行fianlly中的代码
# f.close() try:
f = open('www','w')
f.read()
finally: # 即使遇到报错,程序结束,也会先执行finally中的代码,然后再结束程序
f.close()
print('文件已经关闭了') # finally用来回收一些操作系统的资源 : 数据库连接 打开的文件句柄 网络连接 异常处理的几种情况
try ... except
try ... except ... else
try ... finally
try ... except ... finally
try ... except ... else ... finally # 主动抛出异常 : 是给其他开发者用的
# raise ValueError
# raise ValueError('你写的不对')
# django是别人写的程序 框架 --> 程序员用 # 断言 - 语法
# assert 1==2 # 只能接受一个布尔值 False
# assert 1==1 # 只能接受一个布尔值 False
# print(123456)
# if 1 == int(input()):
# pass
# else:
# raise AssertionError # 自定义异常 :面向对象之后 # 异常处理的忠告,在最外层的异常处理应该在所有的开发结束之后才放
# main()
#sdhjlkghl # try:
# main()
# except Exception as e:
# 把e报错写到文件里

  

最新文章

  1. ViewPager与Tab结合使用
  2. 学记:为spring boot写一个自动配置
  3. MFC编程 | tab control控件的使用
  4. 【python游戏编程之旅】第四篇---pygame中加载位图与常用的数学函数。
  5. 网络服务器带宽Mbps、Mb/s、MB/s有什么区别?10M、100M到底是什么概念?
  6. Understanding Memory Management(2)
  7. struts配置时遇到的几个问题
  8. 使用BufferedReader的时候出现的问题
  9. 链表中倒数第K个节点
  10. Unity doesn't load, no Launcher, no Dash appears
  11. 学习接水系统(java+thread线程)
  12. Python的classmethod和staticmethod区别
  13. Python抓取百度汉字笔画的gif
  14. php-fpm开机自动启动脚本其实源码包里边就有
  15. lua加载函数require和dofile
  16. Asp.net Webform的页面生命周期
  17. cocos2d-x学习记录5——CCTransition场景过渡
  18. Core Java 1
  19. RabbitMQ基础使用之集群构建
  20. putty简单使用

热门文章

  1. django-VIews之HttpResponse(一)
  2. BOOL,int,float,指针变量 与“零值”比较的if语句
  3. Docker配置整理
  4. 解决移动端touch事件与click冲突的问题
  5. 通俗地说逻辑回归【Logistic regression】算法(一)
  6. C语言打印年历
  7. day7-字符串格式化
  8. SVN--服务端安装和设置---centos7
  9. 类型擦除真的能完全擦除一切信息吗?java 泛型揭秘
  10. Windows下搭建远程Linux主机的图形化本地开发环境