Python异常基础

一、常见异常及场景举例

 1.AssertionError

  断言失败,断言是调试中常用(表示自己并不常用┑( ̄Д  ̄)┍)手段

  举例:

  

def foo(s):
    n = int(s)
    assert n != 0, ‘n is zero!‘
    return 10 / n
foo(0)

  上面代码就会输出AssertionError: n is zero!

  方案:

  一般是自己写的,检查设置断言(assert)的地方

 2.AttributeError

  访问了对象没有的属性

  举例:

  

str_a = ‘123‘
str_a.decode()

  上面代码会输出:AttributeError: ‘str‘ object has no attribute ‘decode‘

  方案:

  检查报错相应行,和对应的对象。一般报错会有提示对象的类型。

 3.IOError

  输入输出异常,常见于文件操作

  举例:

  

file = ‘hello_world.txt‘
f = open(file, ‘r‘)
f.read()
f.close()

  上面代码会输出:

  python2:IOError: [Errno 2] No such file or directory

  python3:FileNotFoundError: [Errno 2] No such file or directory

  方案:

  检查文件、文件路径、文件操作权限

 4.IndexError

  索引异常,一般是索引超出范围

  举例:

  

list1 = [1, 2, 3]
print(list1[3])

  上面代码输出IndexError: list index out of range

  方案:

  检查对应位置的对应类型的对象的值。比如是否获取到的列表为空?调试或者打印看看。

    或者获取到的值和自己预想的不一样?是不是格式整齐的许多列表中出了一个叛徒?

5.ImportError

  模块或者包引入错误

  整个错误很常见,不举例了

  方案:

  检查是否包没有安装?python不同版本的同一功能的模块是否叫法不一样?

  模块名的大小写有没有问题?模块路径对不对?

 6.IndentationError

  代码没有正确对齐

  举例:

  

list1 = [1, 2, 3]
 print(list1)

  方案:

  检查缩进。冒号下一行是不是没缩进?同一代码块缩进格数不一样?是不是用了tab缩进,空格出问题了?

 7.NameError

  对象未声明/初始化,属性不存在

  举例:

  

print a

  方案:

  python不用额外声明变量,检查一下有没有初始化。另外,注意一下作用域。

  在类里面的时候,检查属性是不是在普通方法里面用到的,而没在__init__()中初始化。

 8.SyntaxError

  python语法错误

  不举例了,没意思

  方案:

  检查各种括号、冒号等标点符号,是不是用了中文标点?全角半角有没有问题?

  看下python环境,版本有没有用错,比如python3中使用print。。

9.TypeError

  类型错误

  举例:

  

num1 = ‘1‘
print(num1 + 1)

  方案:

  检查类型使用。是不是数字当字符串了?是不是参数传错了?

 10.WindowsError、OSError、SystemError

  系统调用失败、操作系统错误、解释器系统错误

  检查解释器有没有问题,操作系统权限有没有

二、处理异常语句

  Python处理异常相关语句try、except、else、finally

 1.try:
  捕捉异常,捕捉到异常后转入except处理

  感觉某块代码会有异常时,就捕捉。

2.except:

  处理异常,对捕捉到的异常进行处理,在try里面出现异常时进入该语句块

  可以跟异常类型,如 except NameError,只处理相应类型的异常,类型不对,则异常继续抛出

  python2中except NameError,e:

  python3中except NameError as e:

  不跟类型时,啥异常都处理

  可以嵌套多个,会从上到下一个一个匹配

  不想处理的时候用pass

 3.else:
  无异常时执行,在try里面没有出现异常时进入该语句块

 4.finally:
  退出try时执行,不管有没有异常退出try时都执行。

  与try配对,一个try只能有一个,一段程序中多个try可以有多个finally。

  当程序异常退出时finally也能执行,因为异常退出时,说明try没有准确捕捉异常,但是try已经试图捕捉过,退出try时仍然会执行finally,然后再把异常向上抛出。

三、异常处理顺序

  异常从内到外捕捉,一层一层向上抛出。都没抓到就报错。

  如:

  try:

    # 他没捉到我再捉

    try:

      # 我先捉

    except Exception:

      # 有问题在我这处理,不该我背的锅就甩出去

  except:

    # 我处理里面没抓到的问题,处理不了的锅同样甩出去

  else:

    # 没什么问题,就我来说句,

    # 有问题我就静静地看你们甩锅

  finally:

    # 不管怎样我来总结一下

四、手动引发异常

 1.语句 raise

  raise后面可以跟异常,也可以不跟

  raise执行之后就抛出异常,一般情况下程序终止

  使用try...except...语句捕捉raise抛出的异常,和普通异常一样处理

  

 2.手动引发异常的原因

  1)你喜欢,你就引发个异常

  2)你不让别人这么做,就引发个异常

  3)这个不合理,我引发个异常

  

  看到一句话,觉得很有道理,摘抄:

     所有的异常都是主动抛出的,只是不是你抛出的。

  比如说python的各种异常,就是python主动抛出的,把python看做一个和我们一样的人,只不过是它在制定游戏规则而已。

  主动引发异常因情况而定。很多情况会用在制定规则、测试、终止程序等等。

  

五、自定义异常

  使用一个类继承Exception即可自定义异常

  Exception是异常类的基类,BaseException是Exception的基类。

  比如说

  

class MyException(Exception):
    pass

try:
    raise MyException(‘hello!‘)
except MyException as e:
    print(type(e))
    print(e)

  自定义的异常,和python定义的异常,一样用。

  

  

 

时间: 2024-08-01 14:21:46

Python异常基础的相关文章

Python<2>异常基础

在Python中异常通常可以用于各种用途,下面是最常见的几种. <1>错误处理 每当运行时检测到错误,Python的默认异常处理行为将启动(停止程序,打印错误信息).如果不想启动这种默认 行为,就要写try语句捕捉异常并从异常中恢复.当检测到错误是,Python会跳到try处理器,程序在try之后会接着 继续运行. <2>事件通知 发出有效状态的信号 <3>特殊情况处理 很难调整代码去处理的问题 <4>终止行为 <5>非常规流程控制 异常是一种高

问道python之基础篇【一】 认识python

问道python之基础篇[一] 认识python 1.python的简介 1.1.什么是python? Python是一种面向对象.解释型计算机程序设计语言,由Guido van Rossum于1989年发明,第一个公开发行版发行于1991年. Python语法简洁清晰,特色之一是强制用空白符作为语句缩进. Python具有丰富和强大的库.它常被昵称为胶水语言,能够用其他语言制作的各种模块(尤其是C++)很轻松地联结在一起. 1.2.python的特点 简单,易学,免费.开源,高层语言,移植性,

Python开发基础-Day23try异常处理、socket套接字基础1

异常处理 错误 程序里的错误一般分为两种: 1.语法错误,这种错误,根本过不了python解释器的语法检测,必须在程序执行前就改正 2.逻辑错误,人为造成的错误,如数据类型错误.调用方法错误等,这些解释器是不会进行检测的,只有在执行的过程中才能抛出的错误 异常 异常是python解释器在运行程序的过程中遇到错误所抛出的信息,如: Python异常种类: 常用异常: 1 AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x 2 IOError 输入/输出异

python模块基础之getpass模块(pycharm中无法使用。)

python模块基础之getpass模块 getpass模块提供了可移植的密码输入,一共包括下面两个函数: 1. getpass.getpass() 2. getpass.getuser() getpass.getpass([prompt[, stream]]) 提示用户输入一段密码,参数 prompt 用于提示用户开始输入,默认为'Password: '.在 Unix 上,该提示符被写入到类文件对象流中.参数 stream 默认为控制终端 (/dev/tty) 或入过前者不可用时为 sys.s

Python开发基础----异常处理、socket套接字基础1

异常处理 错误 程序里的错误一般分为两种: 1.语法错误,这种错误,根本过不了python解释器的语法检测,必须在程序执行前就改正 2.逻辑错误,人为造成的错误,如数据类型错误.调用方法错误等,这些解释器是不会进行检测的,只有在执行的过程中才能抛出的错误 异常 异常是python解释器在运行程序的过程中遇到错误所抛出的信息,如: Python异常种类: 常用异常: 1 AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x 2 IOError 输入/输出异

PYTHON 一些基础面试题目总结

PYTHON 一些基础面试题目总结http://www.bieryun.com/1191.html 1.       Python是如何进行内存管理的? 答:从三个方面来说,一对象的引用计数机制,二垃圾回收机制,三内存池机制 一.对象的引用计数机制 python内部使用引用计数,来保持追踪内存中的对象,所有对象都有引用计数. 引用计数增加的情况: 1,一个对象分配一个新名称 2,将其放入一个容器中(如列表.元组或字典) 引用计数减少的情况: 1,使用del语句对对象别名显示的销毁 2,引用超出作

Python入门基础学习 三

Python入门基础学习 三 数据类型 Python区分整型和浮点型依靠的是小数点,有小数点就是浮点型. e记法:e就是10的意思,是一种科学的计数法,15000=1.5e4 布尔类型是一种特殊的整形,true就相当于1,false相当于0,可以用来计算 类型转换 转换:整数:int();字符串:str();浮点数:float() 转换例子:(图9) 如果用内置函数当变量名,比如str=123,一旦被赋值,再使用这个函数会被报错. type()函数可以明确告诉我们变量类型. isinstance

python 零基础学习大纲 - 【整理】

[整理]url:https://zhuanlan.zhihu.com/p/101953135 Python基本概念最全图1.Python 解释器: 2.Python数据结构: 3.变量与运算符: 4.Python 流程控制: 5.Python 文件处理: 6.Python 输入输出: 7.Python 异常: 8.Python 函数和模块: 9.Python 面相对象: 10.Python 多线程: 11.Python 标准库: 12.Python 第三方库: 一开始学习知识的时候,我们对基本概

问道python之基础篇【二】python入门

问道python之基础篇[二] Python入门 1.python的工作过程 python解释器把源代码转换为字节码的中间形式,然后再把它翻译成机器使用的机器语言并运行. 2.pyc文件 2.1.什么是pyc文件 执行python代码时,如果导入了其他的.py文件,那么在执行过程中会自动生成一个与其同名的.pyc文件,该文件就是python解释器编译之后产生的字节码. ps:代码经过编译可以产生字节码:字节码通过反编译也可以得到代码. Pyc文件一般由3个部分组成: 最开始4个字节是一个Maig