第1章 概念

错误

语法错误:代码不符合解释器或编译器的语法

逻辑错误:不完整或不合法的输入或者计算出现问题

异常:代码执行过程中,出现问题导致程序无法执行

程序遇到逻辑或算法问题

运行过程中计算机错误(内存不够或IO错误)

区别与联系

错误:代码运行前的语法或逻辑错误

异常:

异常产生:代码执行中,解释器认为是异常,抛出异常

异常处理:截获异常并

处理,否则程序会终止执行

第2章 常见错误和异常

Python标准异常

名称

描述

Exception

常规错误的基类

BaseException

所有异常的基类

NameError

未定义变量、初始化对象 (没有属性)

ValueError

传入了无效的参数

TypeError

无效的操作类型

AttributeError

对象没有这个属性

SyntaxError

Python语法错误

ImportError

导入模块/对象失败

IndexError

序列中没有此索引(index)

KeyError

映射中没有这个键

Warning

警告的基类

ZeroDivisionError

除零错误

FloatingPointError

浮点计算错误

OverflowError

数值运算超出最大限制

TabError

Tab 和空格混用

IndentationError

缩进错误

FileNotFoundError

文件不存在

KeyboardInterrupt

用户中断执行(通常是输入^C)

示例

In [1]: a

---------------------------------------------------------------------------

NameError Traceback (most recent call last)

in ()

----> 1 a

NameError: name 'a' is not defined

In [2]: if a

File "", line 1

if a

^

SyntaxError: invalid syntax

In [3]: if a:

...: print(a)

---------------------------------------------------------------------------

NameError Traceback (most recent call last)

in ()

----> 1 if a:

2 print(a)

3

NameError: name 'a' is not defined

In [6]: a = int('a10')

---------------------------------------------------------------------------

ValueError Traceback (most recent call last)

in ()

----> 1 a = int('a10')

ValueError: invalid literal for int() with base 10: 'a10'

In [5]: 10/0

---------------------------------------------------------------------------

ZeroDivisionError Traceback (most recent call last)

in ()

----> 1 10/0

ZeroDivisionError: division by zero

In [4]: f = open('test.txt')

---------------------------------------------------------------------------

FileNotFoundError Traceback (most recent call last)

in ()

----> 1 f = open('test.txt')

FileNotFoundError: [Errno 2] No such file or directory: 'test.txt'

第3章 try...except

语法

try:

try_suite

except Exception as e:

except_suite

try和except:语法关键字,是必须的

try_suite:需要处理的代码

except_suite:捕获异常后的处理逻辑

exception as e:设置异常的类,并将异常保存到变量e中

执行过程

try用来捕获try_suite中的异常,并将异常传给except进行处理;

except用来处理异常,若捕获的异常与设置的异常一致,使用except_suite进行处理异常;若不一致,则会将捕获的异常传给Python解释器进行处理;

需要处理多个异常时,增加多个except语句即可

只能捕获代码运行过程中的错误

case-1:try...except捕获到一个异常

try:

a

except BaseException:

print('Catch an Error')

Catch an Error

case-2:try...except没有捕获到异常,而是由Python解释器抛出的异常

try:

if a

except BaseException:

print('Catch an Error')

File "", line 2

if a

^

SyntaxError: invalid syntax

说明:Python代码执行时,由Python解释器将 .py 文件转换成二进制的字节码文件,转换过程中,若代码存在语法错误,则直接会抛出异常,实际上代码还没有开始运行。

出现的异常与设置的异常不一致时,不会被捕获,但会被Python解释器抛出

case-1:try...except捕获到一个异常

try:

a

except NameError as e:

print('Catch an Error : ' + str(e))

Catch an Error : name 'a' is not defined

case-2:try...except捕获不到异常,Python解释器抛出异常,并停止代码运行

try:

a

except IOError as e:

print('Catch an Error : ' + str(e))

---------------------------------------------------------------------------

NameError Traceback (most recent call last)

in ()

1 try:

----> 2 a

3 except IOError as e:

4 print('Catch an Error : ' + str(e))

NameError: name 'a' is not defined

示例:猜数字游戏

开始游戏,产生一个1~100之间的随机数

用户输入,游戏根据输入值提示大或者小

用户根据提示,继续输入,直到猜对为止

如果用户输入错误值,程序可以处理异常

使用try...except对输入格式进行保护,确保错误输入时,程序也可以继续进行,增强代码的健壮性

import random

number = random.randint(0, 100)

while True:

try:

guess = int(input('Enter 1~100 :')) # 输入错误时,提醒用户,而非直接终止程序

except ValueError as e:

print('Please enter 1~100 !')

continue

if guess > number:

print('Guess Bigger', guess)

elif guess < number:

print('Guess Smaller', guess)

else:

print('Guess OK! Game over')

break

print(' ')

Enter 1~100 :50

Guess Bigger 50

Enter 1~100 :30

Guess Smaller 30

Enter 1~100 :40d

Please enter 1~100 !

Enter 1~100 :40

Guess Bigger 40

Enter 1~100 :35

Guess Bigger 35

Enter 1~100 :33

Guess OK! Game over

try...except...else语句:如果没有异常时,执行else后的代码

try:

x

except Exception as e:

print('Catch an Error : ' + str(e))

else:

print('No Error')

Catch an Error : name 'x' is not defined

x = 0

try:

x

except Exception as e:

print('Catch an Error : ' + str(e))

else:

print('No Error')

No Error

第4章 try...finally

语法

try:

try_suite

finally:

do_finally

try和finally:语法关键字,是必须的

try_suite:需要处理的代码

do_finally:清理保护工作(不处理异常)

执行过程

如果try没有捕获到异常,继续执行do_finally代码;

如果try捕获到异常,仍然继续执行do_finally代码,最后会将捕获的异常传给Python解释器进行处理。

try:

f = open('test.txt','r')

number = int(f.read())

finally:

f.close()

print('File is closed')

File is closed

---------------------------------------------------------------------------

FileNotFoundError Traceback (most recent call last)

in ()

1 try:

----> 2 f = open('test.txt','r')

3 number = int(f.read())

4 finally:

5 f.close()

FileNotFoundError: [Errno 2] No such file or directory: 'test.txt'

作用

无论try...finally语句是否捕捉到异常,都会执行finally代码;

作用:为异常处理事件提供清理机制,用来关闭文件或释放系统资源。

第5章 try...except...else...finally

try...except...finally

如果try语句没有捕获异常,执行完try代码后,执行finally代码;

如果try语句捕获到异常,首先执行except语句处理错误,再执行finally代码;

case-1:try语句捕获到ValueError错误、文件被关闭

try:

f = open('test.txt')

number = int(f.read())

except ValueError as e:

print('Catch an Error : ' + str(e))

except IOError as e:

print('Catch an Error : ' + str(e))

finally:

print('File will be closed')

f.close()

Catch an Error : invalid literal for int() with base 10: 'x123'

File will be closed

case-2:try语句捕获到错误,执行finally时,被解释器抛出另一个错误,是因为test---1文件不存在,即f没有并定义。

try:

f = open('test---1.txt')

number = int(f.read())

except ValueError as e:

print('Catch an Error : ' + str(e))

except IOError as e:

print('Catch an Error : ' + str(e))

finally:

print('File will be closed')

f.close()

Catch an Error : [Errno 2] No such file or directory: 'test1.txt'

File will be closed

---------------------------------------------------------------------------

NameError Traceback (most recent call last)

in ()

8 finally:

9 print('File will be closed')

---> 10 f.close()

NameError: name 'f' is not defined

case-3:为finally增加try...except异常处理,保护f.close(),避免发生异常

try:

f = open('test1.txt')

number = int(f.read())

except ValueError as e:

print('Catch an Error : ' + str(e))

except IOError as e:

print('Catch an Error : ' + str(e))

finally:

try:

print('File will be closed')

f.close()

except NameError as e:

print('Catch another Error : ' + str(e))

Catch an Error : [Errno 2] No such file or directory: 'test1.txt'

File will be closed

Catch another Error : name 'f' is not defined

try...except...else...finally

如果try语句没有捕获到异常,执行完try代码后,执行else代码,最后执行finally代码

如果try语句捕获到异常,首先执行except语句处理异常,然后再执行finally代码

try语句捕获到异常,except语句处理后,没有执行else语句,直接执行了finally语句

try:

f = open('test.txt')

number = int(f.read())

except ValueError as e:

print('Catch an Error : ' + str(e))

except IOError as e:

print('Catch an Error : ' + str(e))

else:

print('No Error')

finally:

print('File will be closed')

f.close()

Catch an Error : invalid literal for int() with base 10: 'x123'

File will be closed

try语句没有捕获到异常,会依次执行else语句和finally语句

try:

f = open('test.txt')

number = int(f.read())

except ValueError as e:

print('Catch an Error : ' + str(e))

except IOError as e:

print('Catch an Error : ' + str(e))

else:

print('No Error')

finally:

print('File will be closed')

f.close()

No Error

File will be closed

第6章 标准和自定义异常

raise语句

作用:用于主动抛出异常

语法格式:raise [exception [(args)]]

exception:异常的类

args:描述异常信息的字符串元组

示例

In [1]: raise ValueError ('test is not defined')

---------------------------------------------------------------------------

ValueError Traceback (most recent call last)

in ()

----> 1 raise ValueError ('test name is not defined')

ValueError: test name is not defined

assert语句

作用:是断言语句,用于检查表达式是否为真,如果为假会引发AssertionError错误,并抛出

语法格式:assert expression [, args]

expression:表达式内容

args:判断条件的字符串描述信息

应用场景:函数或类中的方法,对参数格式有严格的定义时,可以使用assert对传入的参数进行断言判断

示例

In [2]: assert 0, 'test 0 is False'

---------------------------------------------------------------------------

AssertionError Traceback (most recent call last)

in ()

----> 1 assert 0, 'test 0 is False'

AssertionError: test 0 is False

标准异常

标准异常:Python内建的异常,程序执行前就已经存在

自定义异常

Python允许自定义异常,用于描述Python中没有涉及的异常情况

自定义异常必须继承Exception类

自定义异常,只能主动触发

简单demo

In [13]: class FileError(IOError):

...: pass

...:

In [14]: raise FileError ('test customize error')

---------------------------------------------------------------------------

FileError Traceback (most recent call last)

in ()

----> 1 raise FileError ('test customize error')

示例

# 自定义错误异常

In [15]: class CustomizeError(Exception): # 自定义的错误类继承于Exception基类

...: def __init__(self, customize_error_info): # 初始化实例。传入了一个参数:用户自定义错误的信息

...: Exception.__init__(self) # 初始化了Exception类,

...: self.system_error_info = customize_error_info # 把用户自定义的错误信息传入

...:

...: def __str__(self): # 支撑print打印语句的方法

...: return "Customize_error %s" % self.system_error_info # 打印自定义错误的信息

...:

# 调用自定义的错误异常,并使用try...except进行异常处理

In [16]: try:

...: raise CustomizeError ('test_customeize_error')

...: except CustomizeError as e:

...: print("Error_info : %s" % str(e))

...:

Error_info : Customize_error test_customeize_error

python中if错误-Python中错误和异常相关推荐

  1. python怎么查看代码错误_python中的错误如何查看

    python常见的错误有 1.NameError变量名错误 2.IndentationError代码缩进错误 3.AttributeError对象属性错误 4.TypeError类型错误 5.IOEr ...

  2. 明明安装了模块,还是出现 错误 ImportError: No module named ‘pandas‘ 原因LINUX上安装了多个python环境,将脚本中python 改为python3问题解

    明明安装了模块,还是出现 错误 ImportError: No module named 'pandas'  原因LINUX上安装了多个python环境,将脚本中python 改为python3问题解 ...

  3. python语言包含的错误,Python语言程序中包含的错误,一般分为三种,以下____________不是其中的一种...

    Python语言程序中包含的错误,一般分为三种,以下____________不是其中的一种 答:编译错误 人体体温能自动调控在37度,其原因是( ). 答:人体内产生的热能是分批放出的 人体内有完善的 ...

  4. python中import cv2遇到的错误及安装方法_独家利用OpenCV,Python和Ubidots来构建行人计数器程序(附代码amp;解析)...

    作者:Jose Garcia 翻译:吴振东 校对:张一豪 本文约4000字,建议阅读14分钟. 本文将利用OpenCV,Python和Ubidots来编写一个行人计数器程序,并对代码进行了较为详细的讲 ...

  5. python 3.7.3 运算7错误_Python中通常不应该犯的7个错误

    介绍 Python是一门相对容易掌握的语言,但是由于假设了很多事情,因此犯错误非常容易. 此外,这些错误可能会在很长一段时间内被忽略. 在我其他前四个菜鸟Python错误之前. 避免这些新手Pytho ...

  6. python中if错误-python中的异常处理

    异常 异常就是程序运行时发生错误的信号,在python中,错误触发的异常如下 异常种类 在python中不同的异常可以用不同的类型(python中统一了类与类型,类型即类)去标识,不同的类对象标识不同 ...

  7. python中语法错误-python冒号语法错误python中如何创建字典

    python字典定义 字典是另一种可变容器模型,且可存储任意类型对象. 字典的每个键值 key=>value 对用冒号 : 分割,每个键值对之间用逗号 , 分割,整个字典包括在花括号 {} 中 ...

  8. python运行错误-Python在运行中发生错误怎么正确处理方法,案例详解!

    在程序运行的过程中,如果发生了错误,可以事先约定返回一个错误代码,这样,就可以知道是否有错,以及出错的原因.在操作系统提供的调用中,返回错误码非常常见.比如打开文件的函数open(),成功时返回文件描 ...

  9. 【错误记录】Mac 中 IntelliJ IDEA 运行 Python 程序报错 ( “Python“ 因为出现问题而无法打开 )

    文章目录 一.报错信息 二.解决方案 一.报错信息 先安装了 Pytnon3.10.0 版本 , 然后有安装了 Python3.6.3 版本 , 安装完成后 , IntelliJ IDEA 中就出现如 ...

最新文章

  1. 每日英语:China's New Anti-Graft Website: A Tale of Tigers, Flies and Bath Tubs
  2. iOS10 UI教程视图的中心位置
  3. Java mybatis实现mysql批量插入
  4. 苹果笔记本电脑电池保养细则
  5. JZOJ 5956. 【NOIP2018模拟11.7A组】easy LCA
  6. Guid.NewGuid().ToString(B) 是什么意思?
  7. PDF转Word的免费方法
  8. VMWare虚拟机转换成KVM
  9. 明源云·天际,地产⾏业的Salesforce Lightning Platform
  10. ASP.NET MVC升级到ASP.NET Core MVC踩坑小结
  11. 科目三电子路考易错细节总结
  12. 大学生慕课第二周学习笔记
  13. 通过给目标函数增加一个正则项来防止其过拟合
  14. spring中IOC的简单使用
  15. 手动杀毒,SOLA病毒,也称之为worm.script.bat.Agent、Trojan.Win32.Sola病毒)
  16. 遥感影像中常用的目标检测数据集
  17. Qt解决资源文件中无法显示图片的问题
  18. Pwned Vulnhub
  19. Hadoop3.2.1 RPC通讯 一锅端
  20. 焊接入门——基础知识整理

热门文章

  1. WPF异步载入图片,附带载入中动画
  2. jquery插件学习(六)
  3. Unity3D 游戏引擎之脚本实现模型的平移与旋转(六)
  4. Microsoft Visual SourceSafe 使用指南
  5. visual studio 阅读 linux-kernel
  6. 017-平衡二叉树(三)
  7. FMS4.5( Adobe Flash Media Server4.5)流媒体服务器搭建
  8. codeforces 667A A. Pouring Rain(水题)
  9. kafka在zookeeper中存储结构
  10. Identity 验证,Authorize 特性