python中if错误-Python中错误和异常
第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中错误和异常相关推荐
- python怎么查看代码错误_python中的错误如何查看
python常见的错误有 1.NameError变量名错误 2.IndentationError代码缩进错误 3.AttributeError对象属性错误 4.TypeError类型错误 5.IOEr ...
- 明明安装了模块,还是出现 错误 ImportError: No module named ‘pandas‘ 原因LINUX上安装了多个python环境,将脚本中python 改为python3问题解
明明安装了模块,还是出现 错误 ImportError: No module named 'pandas' 原因LINUX上安装了多个python环境,将脚本中python 改为python3问题解 ...
- python语言包含的错误,Python语言程序中包含的错误,一般分为三种,以下____________不是其中的一种...
Python语言程序中包含的错误,一般分为三种,以下____________不是其中的一种 答:编译错误 人体体温能自动调控在37度,其原因是( ). 答:人体内产生的热能是分批放出的 人体内有完善的 ...
- python中import cv2遇到的错误及安装方法_独家利用OpenCV,Python和Ubidots来构建行人计数器程序(附代码amp;解析)...
作者:Jose Garcia 翻译:吴振东 校对:张一豪 本文约4000字,建议阅读14分钟. 本文将利用OpenCV,Python和Ubidots来编写一个行人计数器程序,并对代码进行了较为详细的讲 ...
- python 3.7.3 运算7错误_Python中通常不应该犯的7个错误
介绍 Python是一门相对容易掌握的语言,但是由于假设了很多事情,因此犯错误非常容易. 此外,这些错误可能会在很长一段时间内被忽略. 在我其他前四个菜鸟Python错误之前. 避免这些新手Pytho ...
- python中if错误-python中的异常处理
异常 异常就是程序运行时发生错误的信号,在python中,错误触发的异常如下 异常种类 在python中不同的异常可以用不同的类型(python中统一了类与类型,类型即类)去标识,不同的类对象标识不同 ...
- python中语法错误-python冒号语法错误python中如何创建字典
python字典定义 字典是另一种可变容器模型,且可存储任意类型对象. 字典的每个键值 key=>value 对用冒号 : 分割,每个键值对之间用逗号 , 分割,整个字典包括在花括号 {} 中 ...
- python运行错误-Python在运行中发生错误怎么正确处理方法,案例详解!
在程序运行的过程中,如果发生了错误,可以事先约定返回一个错误代码,这样,就可以知道是否有错,以及出错的原因.在操作系统提供的调用中,返回错误码非常常见.比如打开文件的函数open(),成功时返回文件描 ...
- 【错误记录】Mac 中 IntelliJ IDEA 运行 Python 程序报错 ( “Python“ 因为出现问题而无法打开 )
文章目录 一.报错信息 二.解决方案 一.报错信息 先安装了 Pytnon3.10.0 版本 , 然后有安装了 Python3.6.3 版本 , 安装完成后 , IntelliJ IDEA 中就出现如 ...
最新文章
- 每日英语:China's New Anti-Graft Website: A Tale of Tigers, Flies and Bath Tubs
- iOS10 UI教程视图的中心位置
- Java mybatis实现mysql批量插入
- 苹果笔记本电脑电池保养细则
- JZOJ 5956. 【NOIP2018模拟11.7A组】easy LCA
- Guid.NewGuid().ToString(B) 是什么意思?
- PDF转Word的免费方法
- VMWare虚拟机转换成KVM
- 明源云·天际,地产⾏业的Salesforce Lightning Platform
- ASP.NET MVC升级到ASP.NET Core MVC踩坑小结
- 科目三电子路考易错细节总结
- 大学生慕课第二周学习笔记
- 通过给目标函数增加一个正则项来防止其过拟合
- spring中IOC的简单使用
- 手动杀毒,SOLA病毒,也称之为worm.script.bat.Agent、Trojan.Win32.Sola病毒)
- 遥感影像中常用的目标检测数据集
- Qt解决资源文件中无法显示图片的问题
- Pwned Vulnhub
- Hadoop3.2.1 RPC通讯 一锅端
- 焊接入门——基础知识整理
热门文章
- WPF异步载入图片,附带载入中动画
- jquery插件学习(六)
- Unity3D 游戏引擎之脚本实现模型的平移与旋转(六)
- Microsoft Visual SourceSafe 使用指南
- visual studio 阅读 linux-kernel
- 017-平衡二叉树(三)
- FMS4.5( Adobe Flash Media Server4.5)流媒体服务器搭建
- codeforces 667A A. Pouring Rain(水题)
- kafka在zookeeper中存储结构
- Identity 验证,Authorize 特性