zoukankan      html  css  js  c++  java
  • python-异常处理

    一、异常

    异常是什么?

           就是影响程序正常执行的事件,异常在程序执行的过程中发生,脚本发生异常时,我们需要捕获它,否则程序就会终止。

    异常处理:

           1、捕获异常:try:。。。except 。。。。。

     1 while True:
     2     try:
     3         num1=input('>>:')
     4         num2 = input('>>:')
     5         num1=int(num1) #   出错,不再往下执行try里面的代码块, 直接进入except
     6         num2 = int(num2)
     7         num=num1+num2
     8         print(num)
     9     except Exception as e:
    10         print(e)  #捕获错误信息   程序重新执行

           2、复杂的异常处理结构:

                 try:

                      代码块1

                 except:

                      代码块2

                 else:

                      代码块3

                 finally:

                      代码块4

                不出异常:1-3-4

                   出异常:1-2-4

           3、异常种类

               Exception可以捕获所有的异常

               常用的其他异常

     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 传入一个调用者不期望的值,即使值的类型是正确的

             对于特殊处理或提醒的异常需要先定义,最后定义Exception来确保程序正常运行

     1 s1 = 'hello'
     2 try:
     3     int(s1)
     4 except IndexError as e:
     5     print e
     6 except KeyError as e:
     7     print e
     8 except ValueError as e:
     9     print e
    10 except Exception as e:
    11     print e

              主动触发异常

              raise ..............   一般和自定义异常搭配使用

     1 while True:
     2     try:
     3         num1=input('>>:')
     4         num2 = input('>>:')
     5         num1=int(num1) 
     6         num2 = int(num2)
     7         num=num1+num2
     8         print(num)
     9         raise Exception('eeeeeeeeeerrrrrrrrrrrrrrSSSSSSSS') #主动触发异常
    10     except Exception as e:
    11         print(e)  #  打印出 eeeeeeeeeerrrrrrrrrrrrrrSSSSSSSS

    断言:  assert 条件

    1 print(1)
    2 assert 1==1
    3 print(2)
    4 '''输出:1
    5          2
    6 '''

    二、反射

           以字符串的形式去访问对象中指定的属性,反射有四个方法:      

                hasattr(容器,'名称')    以字符串的形式判断某对象中是否含有指定的属性

                getattr(容器,'名称')    以字符串的形式去某个对象中获得指定的属性

                setattr(容器,'名称',值)      以字符串的形式去某个对象中设置指定的属性

                delattr(容器,'名称')     以字符串的形式去某个对象中删除指定的属性

    1、允许用户输入 不同的url:
    account/login
    account/logout
    home/index
    home/order
    2、看到不同的结果
    3、输入不存在的url,曝404错误

    url列表=[account/login,account/logout,home/index,home/order]
    以上url的函数均保存在controller下的account脚本中
    '''
    inp=input('请输入url')
    m,n=inp.split('/') #m=account n=login
    去某个模块中找函数,如果函数存在就执行函数,如果不存在函数就报错
    getattr() #专门用来去某个地方获取内部的东西 (以字符串的形式获取)
     1 from controller import account   #以上url的函数均保存在controller下的account脚本中
     2 
     3 h=hasattr(account,'login1') #去account模块(脚本)中,是否存在login函数
     4 print(h)    # 存在返回true    不存在返回false
     5 getattr(account,'login')# 去account模块(脚本)中获取login函数
     6 
     7 setattr(account,'login1','ddd')   #去account模块(脚本)中添加login1函数
     8 h=hasattr(account,'login1')   #再次判断是否存在login1属性
     9 print(h)  #返回true
    10 
    11 delattr(account,'login1')  #去account模块(脚本)中删除login1函数
    12 h=hasattr(account,'login1')   #再次判断是否存在login1属性
    13 print(h)  #返回false

            

                      

  • 相关阅读:
    HTML页面跳转的5种方法
    利用jquery来进行表单的多向提交
    HTML设置超链接字体颜色和点击后的字体颜色
    bootstrap精简教程
    类型的转换的神秘
    [转载] mysql 索引中的USING BTREE 的意义
    [转载]WeeksInAYear、WeeksInYear、DaysInAYear、DaysInAMonth、DaysInYear、DaysInMonth
    范围内取随机数
    [转载]asp.net中,<%#%>,<%=%>和<%%>分别是什么意思,有什么区别
    [转载]localStorage使用总结
  • 原文地址:https://www.cnblogs.com/songxiaonan/p/6127180.html
Copyright © 2011-2022 走看看