Python基本语法_错误异常处理详解

1.错误可以分为两种:
一个是代码运行前的语法错误;另外一个是逻辑错误
        a)语法错误(这种错误,根本过不了python解释器的语法检测,必须在程序执行前就改正)
          def test:
                   xxx
              SyntaxError: invalid syntax
                  其他语法的错误

       b)逻辑错误
                用户输入不完整(比如输入为空)或者输入非法(输入不是数字)
                 i=input("xxx: ")
                 int(i)
                 print( )

         执行结果是:ValueError: invalid literal for int() with base 10: 'fsf'

2.异常
(1)异常指的就是非正常状态,在python里面,一般都是用异常对象来表示异常。若程序在编译或运行过程中发生错误,程序的执行过程就会发生改变,抛出异常对象,程序流进入异常处理。如果异常对象没有被处理或捕捉,程序就会执行回溯(Traceback)来终止程序。

   异常的分类:
        a)程序遇到逻辑或算法错误
         b)运行过程中计算机错误:内存不够或者io错误
   异常的步骤:
       a)异常产生,检查到了错误,解释器也认为是不正常的,就会抛出异常
         b)异常处理,截取到异常,系统可能忽略,要么终止程序来处理异常

(2)异常处理

            a)try语句:
            第一步,先执行try语句(处在两个关键字try 、except中间的),没有异常发生的话,就不执行except后面的语句;try语句执行后直接结束。
 一旦在执行try语句时发生了异常,那么try语句中的代码将会忽略。
如果异常的类型和 except 之后的名称相匹配,那么对应的except语句将被执行。最后再去执行 try 语句之后的代码。

           b)一个 try 语句可能包含多个except语句,分别来处理不同的特定的异常。最多只有一个分支会被执行!处理程序将只针对对应的try中的异常进行处理,
一个except子句可以同时处理多个异常,这些异常将被放在一个括号里成为一个元组,例如:

except (RuntimeError, TypeError, NameError):
        pass

try except 语句还有一个可选的else子句,如果使用这个子句,那么必须放在所有的except子句之后。这个子句将try语句没有发生任何异常的时候才会执行   例如: 

def doage():
    age=int(input("请输入年龄:  "))
    if 1<= age <=100:
        print("正常")
    else:
        raise ageException("年龄只能在1至100之间")
try:
    doage()
except ageException as ii:
    print(ii)
else:
    print("您是否输入错误?")


执行结果:只要我输入的数字在1~100范围内,else语句就会跟着执行;反之就不出现

使用 else 子句比把所有的语句都放在 try 子句里面要好,这样可以避免一些意想不到的、而except又没有捕获的异常。




3.常见的异常

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



万能异常(所有异常都包含,不具体到某一步)

在python的异常中,有一个万能异常:Exception,可以捕获任意异常

class ageException(Exception):
    pass


raise主动触发异常

class hexinException(BaseException):
    def __init__(self,msg):
        self.msg=msg
    def __str__(self):
        return self.msg

try:
    raise hexinException('类型错误')
except hexinException as e:
    print(e)



课堂练习:

#定义一个方法:在此方法内不进行异常处理
#定义一个列表list1,通过下标访问最后一个元素,list1[1list1.length]
#定义一个调用的方法:捕获异常

def method():
    list1 = [0, 1, 2, 3, 4, 5]
    list1[len(list1)]
def methoderror():
    try:
        method()
    except IndexError as ie:
        print("下标超出范围")
        print(ie)
methoderror()

#年龄的自定义异常,在1-100岁之间为正常,否则抛出异常
class ageException(Exception):
    pass
def doage():
    age=int(input("请输入年龄:  "))
    if 1<= age <=100:
        print("正常")
    else:
        raise ageException("年龄只能在1至100之间")
try:
    doage()
except ageException as ii:
    print(ii)


你可能感兴趣的:(Python基本语法_错误异常处理详解)