环境小硕的转行之路-23-异常处理

异常处理

常见的变量代称

1.NameError 变量错误
2.IndexError 列表index错误
3.KeyError 字典的key不存在
4.EOFError iteration到末端
5.FileNotFoundError
6.8ModuleNotFoundError*
7.ValueError 值的类型不匹配
以下的应该在写代码的时候就规避掉
8.SyntaxError 语法错误
9.NameError 变量错误

需要报错的情景以及报错的常见情况

#什么时候最容易出异常:有用户参与的时候,有外界数据介入的时候,从文件里读或从网络上获取.
#当有多行报错的时候,为啥?
‘‘‘
# def func1():name
# def func2():
#     func1()#最后才报func1()
# def main():
#     func2()#第二报func2()
# main()#先报main

 Traceback (most recent call last):
  File "C:/Users/Administrator/PycharmProjects/全栈学习/day20/01异常处理.py", line 18, in <module>
    main()
  File "C:/Users/Administrator/PycharmProjects/全栈学习/day20/01异常处理.py", line 17, in main
    func2()
  File "C:/Users/Administrator/PycharmProjects/全栈学习/day20/01异常处理.py", line 15, in func2
    func1()
  File "C:/Users/Administrator/PycharmProjects/全栈学习/day20/01异常处理.py", line 13, in func1
    def func1():name
  NameError: name ‘name‘ is not defined
‘‘‘

  

except以及多分支

#try 可以只有一个 except可有多个(多分支),多分支合并: 多个error可以放到一个元组再放到一个except下.
# 多分支合并
 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(‘您输入的内容不合法‘)
 #万能异常except:(等所有程序开发完了,测试完了才开始用万能异常)
#示例:
def buy():
    print(‘buy‘)
    name#valueerror

def back():
    print(‘back‘)
    [][1]#indexerror

def show():
    print(‘show‘)
    1/0#zerodivisionerror

def main():
    l = [(‘购物‘,buy),(‘退货‘,back),(‘查看订单‘,show)]
    while True:
        for num,i in enumerate(l,1):
            print(num,i[0])
        num = int(input(‘num >>>‘))#已知可能发生valueerror,可以利用多分支合并到下面的万能异常里面
        print(l[num - 1])
        try:
            # num = int(input(‘num >>>‘))
            # print(l[num - 1])
            func = l[num - 1][1]
            func()
        # except (ValueError,IndexError):
        #     print(‘您输入的内容不合法‘)
        except Exception as e:#万能异常,应该永远放在最下面.相当于except:但except:取不到信息.
              print(e.args,e.__traceback__.tb_lineno,e.__traceback__.tb_frame)#发生了什么异常,在第几行发生的,
              print(‘用户在选择了%s操作之后发生了不可知的异常‘ % l[num - 1][0])
#
main()

  

else以及finally分支

#else分支
try:
    print(‘aaa‘)
    name
    [][1]
except NameError:
    print(‘name error‘)
except IndexError:
    print(‘index error‘)
except Exception as e:
    print(‘exception‘)
else:
    print(‘else error‘)#没有异常的时候才执行,如果程序成功了要汇报一句.
finally:
    print(‘finally‘)#无论如何都会被执行
finally分支
def func():
    f = open(‘file‘,‘r‘)
    try:
        while True:
            for line in f
                if line.startswith(‘a‘)
                    return line
    except:
        print(‘异常‘)
    finally:#即使报错,程序结束或者return,也会先执行finally中的代码,可以直接和finally去联用.有利地保障资源回收.
        f.close()
        print(‘文件已经关闭了‘)#with open有三个错误处理不了,关闭不了文件.
#finally用于回收一些操作系统的资源:比如文件句柄,网络连接,连接数据库就是借用了操作系统的网卡,
#总结:写一个try: 必须带上except or finally or except+else.
#主动抛出异常 用户输入了你不想让他输入的东西就主动抛异常.
# raise ValueError(‘你写的不对‘)#禁止给用户抛异常,给其它开发者用的.django是别人写的程序,是一个框架.

  

断言以一些注意事项

#断言 新语法
assert 1 == 2#只能接受一个布尔值,False报assertionerror,好比if,就是程序向下执行的先决条件.
print(‘123132123‘)

#自定义异常:学完面向对象之后学
#异常处理的忠告:
    #程序在没开发完成,禁止在最外层加异常处理.要在经过测试以后再加.

  

#最后加是为了增强客户体验,应该try:main(0 except exception as f:将错误加到程序里.

原文地址:https://www.cnblogs.com/negu/p/11739266.html

时间: 2024-10-10 00:28:03

环境小硕的转行之路-23-异常处理的相关文章

环境小硕的转行之路-12-序列化和反序列化、模块的引用

利用json和pickle模块序列化代码 序列化定义:把内存的数据对象变成字符串了 序列化 def sayhi(name): print('hello',name) info = { 'name':'negu', 'age':22 # 'func':sayhi() } '''法1''' f = open('test.text','w') f.write(str(info)) f.close() '''法2''' import json#只能处理简单的数据类型:str.list.dict.所以函数

环境小硕的转行之路-25-模块的导入与管理

模块的一些基本概念 什么是模块? ->别人已经写好的一组功能的集合.别人写好的函数,变量,方法放在一个文件里. (这个文件可以被我们直接使用)这个文件就是模块. import os,re,sys,random#alt点进去可以看到都是py文件但也有dll文件(c语言代码编译成的py代码).所以直接写py文件即可. 如何自己写一个模块?->创建py文件,自己写一个名字,符合变量名命名规则+汉字的文件名,这个名字就是模块名了. 本文中my_module中的代码 #__all__ = ['name'

环境小硕的转化之路-17-内置函数拾遗

前言 之前写过内置函数的博文,但觉得这个老师讲的更详细一点,分类也更清楚一点. 将一些常用的内置函数po出来. 内部储存函数相关 lst = [1,2,3] #id(obj) print(id(lst))#打印id #hash(obj) print(hash(lst))#目的是为了存储,计算之后是一个数字.hash值尽量不要重复(某些特定环境下会重复), 是一种另类的加密.所以hash值往往很大.字典就是用hash法进行存储数据的. #打个比方 dict = {'jay':'周董','jj':'

开坑,Unix环境高级编程,转行之路又得缓缓了

不要问我基础,我用了近6年的Linux系统,最早的版本可以追溯到Ubuntu 8.04,常用的命令 VIM基本上是没压力,遇到问题google 配置环境变量 网络环境也不在话下, C语法基本熟练,过去一年,我自学过 数据结构 算法 CSAPP等课程,开坑Unix环境编程压力不大, 开坑的原因主要是为了了解系统底层编程,更接系统实现的原理,预计时间2-3个月,Unix网络编程留明年开坑算了, 估计Spring MVC等web后端框架又得推一推了,说实话,目前我真的不急着去找工作,我缺乏实际的工程经

一名Android开发者的微信小程序填坑之路(2)

前言 上一篇是九月二十七日写的,而这一篇我动笔的时间是十月十日(特殊的日子),中间相隔十三天--当然是因为国庆节.说老实话,这十三天里面我都没有碰和小程序有关的东西--毕竟学习小程序的开发也只是起于兴趣,而平时的工作并不会涉及与其相关的东西--但是在这十三天里,我能明显的感受到小程序热正在逐渐的消退,或者说大家正在逐渐以一种较为平和的姿态接受它的存在,其实这是一件好事.期待公测的到来. 接下来我就直接进入正题了,另外,文末我想和大家分享一下我的国庆节. PS:这篇文章是接着上一篇文章 一名And

Hybrid小程序混合开发之路 - 数据交互

HTML+CSS是历史悠久.超高自由度.控制精准.表现能力极强.编码简单.学习门槛超低.真跨平台的一种UI界面开发方式. 本文介绍的是微信小程序和H5混合开发的一种数据交互方式. 很多应用在原生界面中混杂着HTML界面 记得xp时代的QQ,有些界面偶尔会弹出熟悉的js错误对话框,还能右键弹出熟悉的IE6的右键菜单,伪装的挺好,差点没认出来,现在的QQ就不知道了. 美团.淘宝这些拥有几乎无限界面的手机App,顶部进度条一亮,这是一个H5 没谁了! Electron!好嗨哟~ 数据交互 使用了HTM

小Y的轮回之路——攒机装机、B150装win7

两个月前,陪伴我5年多的小Y(ideapad-y460N卡)突然大伤元气,硬盘跪了,显示屏也黑了一小块.本着经济实惠凑合用的态度换了个320G的硬盘,没想过几天显示屏情况加重,出现无数个红绿相间的线条.正所谓天下无不散之筵席,既然无缘并肩作战,那就一路走好~ 寻寻觅觅,冷冷清清,凄凄惨惨戚戚.在无数次寻寻觅觅后,决定入手一款台式机.记得小时候有一阵子特别时兴组装机,奈何当时不太懂电脑各种乱七八糟的参数,买的都是品牌机.现在也懂个七七八八了,反正都是套路嘛!既然有需求,有情怀,又有知识,那就搞起吧

struts2学习笔记之十(用户选择语言环境小程序)

struts 默认使用浏览器设置选择国家和语言,提供机制让用户选择国家语言环境 根据request_locale来确定. 如在提交请求时加上request_locale=en_US来设定语言环境为English 例如:http://localhost:8080/I18n/I18nJSP?request_locale=zh_CN 这样就会得到中文的语言环境显示JSP页面 接下来演示一个用户在JSP页面选择语言环境的小程序 web.xml配置 制作JSP页面 Action处理类 struts.xml

三、环境搭建 之 Windows10 安装 Apache2.4.23

操作系统:Windows10 家庭中文版 Apache版本:2.4.23 下载地址:http://pan.baidu.com/s/1nuB6cjf 参考文档:win7(64位)php5.5-Apache2.4-mysql5.6环境安装 http://jingyan.baidu.com/article/9faa723152c5d6473d28cb47.html 安装步骤: 1.将下载到的文件解压缩到安装目录,以下记录我的安装目录: 2.修改 ../config/httpd.conf 配置文件: S