zoukankan      html  css  js  c++  java
  • 错误和异常

    '''错误和异常'''
    '''什么是错误:程序中难免出现错误,而错误分成两种'''
    # 1.语法错误(这种错误,根本过不了python解释器的语法检测,必须在程序执行前就改正)
    # print('书写错误' # 括号不完整
    # def func: # 缺少括号
    #  pass
    
    # 2.逻辑错误
    # x = 1/0 # 分母不能为0,会报错,ZeroDivisionError: division by zero
    # l = [1, 2]
    # l[5] # IndexError: list index out of range
    # age = int('qwe') # ValueError: invalid literal for int() with base 10: 'qwe'
    
    '''什么是异常:异常就是程序运行时发生错误的信号,在python中,错误触发的异常如下'''
    # 异常的追踪信息:Traceback (most recent call last)
    # 异常类:ValueError
    # 异常值:invalid literal for int() with base 10: 'qwe'
    
    
    '''python中的异常种类'''
    # 在python中不同的异常可以用不同的类型(python中统一了类与类型,类型即类)去标识,不同的类对象标识不同的异常,一个异常标识一种错误
    # 常用异常
    AttributeError # 试图访问一个对象没有的属性,比如foo.x,但是foo没有属性x
    IOError # 输入/输出异常,基本上是无法打开文件
    ImportError # 无法引入模块或包,基本上是路径问题或名称错误
    IndentationError # 语法错误(的子类),代码没有正确对齐
    IndexError # 下表索引超出序列边界,比如当x只有三个元素,却试图访问x[5]
    KeyError # 试图访问字典里不存在的键
    KeyboardInterrupt # Ctrl+C被按下(在终端可演示,当为输入操作时按下Ctrl+C)
    NameError # 使用一个还未被赋予对象的变量
    SyntaxError # python代码非法,代码不能编译(个人认为这是语法错误,写错了)
    TypeError # 传入对象类型与要求的不符合
    UnboundLocalError # 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,导致你以为正在访问它
    ValueError # 传入一个调用者不期望的值,即使值的类型是正确的
    
    
    '''异常处理'''
    # 什么是异常处理:python解释器检测到错误,触发异常(也允许程序员自己触发异常raise);程序员编写特定的代码,专门用来捕捉这个异常(这段代码与程序逻辑无关,与异常处理有关);
    # 如果捕捉成功则进入另外一个处理分支,执行你为其定制的逻辑,使程序不会崩溃,这就是异常处理
    
    # 为何要进行异常处理:python解释器去执行程序,检测到了一个错误时,触发异常,异常触发后且没有被处理的情况下,程序就在当前异常处终止,后面的代码不会运行,谁会去用一个运行着突然就崩溃的软件;
    # 所以你必须提供一种异常处理机制来增强你程序的健壮性与容错性
    
    # 如何进行异常处理:首先须知,异常是由程序的错误引起的,语法上的错误跟异常处理无关,必须在程序运行前就修正
    # age = input('输入年龄:')
    # if age.isdigit():
    #  int(age) # 主逻辑
    # else:
    #  print('输入类型有误') # 还可以加很多if判断各种类型,而且每一个变量判断都需要加入if或者if中加入and,这样让代码太冗长了
    
    # 总结:1、if判断式的异常处理只能针对某一段代码,对于不同的代码段的相同类型的错误你需要写重复的if来进行处理
    #      2、在你的程序中频繁的写与程序本身无关,与异常处理有关的if,就像是在你的代码中导出拉屎。可读性极其的差
    #      3、这是可以解决问题的,只是存在上述的问题,所以千万不要妄下定论if不能用来异常处理
    
    
    '''python为每一种异常定制了一个类型,然后提供了一种特定的语法结构用来进行异常处理'''
    # 1、基本语法
    # try:
    #     被检测的代码块
    # except 异常类型:
    #     try中一旦检测到异常,就执行这个位置的逻辑
    
    # 2、异常类只能用来处理指定的异常情况,如果非指定异常则无法处理
    # s1 = 'asd'
    # try:
    #  int(s1)
    # except IndexError as i:
    #  print(i) # ValueError: invalid literal for int() with base 10: 'asd'
    
    # 3、多分支(多个except)
    # s2 = 'sdf'
    # l = [1, 2]
    # d = {}
    # try:
    #  int(s2) # 第一步就错了
    #  l[5]
    #  d['name']
    # except IndexError as i: # 这一步没捕捉到异常,进行下一个异常捕捉
    #  print(i)
    # except ValueError as v: # 成功捕捉到这个异常,所以就执行了此步操作,分支终止
    #  print(v)
    # except KeyError as k:
    #  print(k)
    
    # 4、万能异常(Exception)
    # s3 = 'iop'
    # try:
    #  int(s3)
    # except Exception as e:
    #  print(e) # invalid literal for int() with base 10: 'iop'
    #
    # l = [1, 2]
    # try:
    #  l[5]
    # except Exception as e:
    #  print(e) # list index out of range
    
    # 1、如果你想要的效果是,无论出现什么异常,我们统一丢弃,或者使用同一段代码逻辑去处理他们,只有一个Exception就足够了
    # 2、如果你想要的效果是,对于不同的异常我们需要定制不同的处理逻辑,那就需要用到多分支了;也可以在多分支后来一个Exception
    while True: print('studying...')
  • 相关阅读:
    linux文件操作
    文件和目录维护
    随心而记
    开学了
    基本逻辑门电路原理
    ubuntu搭建ftp服务
    中断
    数码管
    字,寻址和移位
    Error: Could not find or load main class resourcemanager
  • 原文地址:https://www.cnblogs.com/xuewei95/p/14770334.html
Copyright © 2011-2022 走看看