预备小菜:Python入门之异常
在之前的示例中遇见了多次Error,就是异常,这种场景还是经常存在的,比如说读取字典中不存在的key,打开一个本地文件,可是这个文件却不存在,代码就会报出异常,进而停止运行,接下来我们认识一下异常和了解怎么处理异常。
认识异常
在认识异常之前,先需要认识一下什么是错误。错误是我们在编写代码过程中不符合语言规范的写法,通常IDE都会有这样的错误提示,即便是没有运行之后就看见熟悉的提示:SyntaxError: invalid syntax,这就是语法错误。错误是在代码运行前就可以排查的,而异常是不能预见到的,在计算过程中出现的错误。
在Python中,是用异常对象(exception object)来表示异常情况。记得之前提到的,在Python中一切皆对象,异常也不例外。而且在Python中有很强大的异常处理能力,内置了很多异常类型,能准备的向用户反映错误信息,常见的错误异常类型如下表所示。
异常类型 | 异常问题 |
---|---|
Exception | 错误对象的基类 |
IOError | 输入或者输出错误 |
KeyError | 映射中没有此键 |
MemoryError | 内存溢出 |
RuntimeError | 运行错误 |
TypeError | 类型无效的操作 |
IndexError | 序列中没有此索引 |
UnicodeError | 与Unicode相关的错误 |
IndentationError | 缩进错误 |
AttributeError | 对象没有此属性 |
ImportError | 导入模块错误 |
OSError | 操作系统错误 |
FileExistsError | 创建已经存在的目录/文件 |
FileNotFoundError | 文件不存在 |
除了错误还有一些内容是警告(Warning),警告并不会造成代码的停止运行。很多时候程序员只关心错误,并不是关心警告。
异常处理
处理异常使用try/except语句。try/except语句中如果try中的代码块出现异常,except中的会捕捉异常信息并处理。即在try代码中出现异常,程序也不会因此停止。以下就是try/except的使用语法:
try:
# 执行代码
except 异常类型: #可以添加多个except ,捕捉多种异常
# 执行代码
上面提到Exception是异常的基类,也就是所有的异常类型都可以使用Exception来处理,可以说是万能异常处理方法。
它的优点就是使用一段代码逻辑就可以处理异常。缺点就是不能分类区别,如果想对不同的异常做分别不同的处理,那么需要使用多个分支异常来处理。通常情况下,我们还是会在最后使用Exception来处理未知的异常,那些可以预料到的异常,使用明确的异常类型和对应的处理方法。
在异常中也有可以使用try… else的语句,当try的代码中没有报出异常,会执行else中的代码,使用语法如下:
try:
# 执行代码
except 异常类型:
# 执行代码
else:
print('这段代码没有异常')
当然也有try… finally的语句,这跟else不同的是,在finally下的代码块,不管有没有出异常都被执行。使用语法如下:
try:
# 执行代码
except 异常类型:
# 执行代码
finally:
print('执行finally内容')
通常在finally中会做一些日志处理或者释放资源的工作。异常在后续的数据采集,尤其是爬虫中,很多时候由于网络或者对方服务器的原因,某一次请求失败了,因为没有完整的数据,后续的代码无法完成,如果没有异常处理,程序会直接停止,而我们希望是一次两次的请求失败,并不影响后续的请求,所以使用try except语句,将异常捕捉,然后跳过继续执行后续代码。例如下面代码所示:
创建文件夹
def newFolder(folder_name):
isExists = os.path.exists(folder_name)
if not isExists:
try:
os.mkdir(folder_name)
except Exception:
pass
当我们的目的只是为了出现错误的时候,不影响后续代码的运行,那么我们就选择使用Exception,毕竟不关心到底发生了什么错误,通常数据采集过程中,不可能所有的请求都处理成功,存在异常是一件正常的事情。
相关文章
- python3生成随机数_用python随机输出一个区间的随机数
- Python入门系列(五)一篇搞懂python语句
- Python入门系列(十)一篇学会python文件处理
- python爬虫—–Python访问http的几种方式「建议收藏」
- python中关于命名的例子_Python 命名规范入门实例「建议收藏」
- 【说站】python面向对象设计和面向对象编程的理解
- 【说站】python捕获多个异常的规则
- 【说站】python异常处理的流程
- 【说站】python索引的顺序和倒序
- pandas的columns函数_python value_counts
- python上的表白代码_用Python实现表白代码
- Win10 环境下安装Tesseract-OCR与Python集成识别
- python如何主动抛出异常
- python 异常名称
- 网络工程师学Python-22-异常处理Try Except
- python通过pil生成图片验证码详解编程语言
- Python学习:7.文件操作详解编程语言
- 一步一步学会在Linux上运行Python程序(linux运行python程序)
- Linux下使用Python开发体验之旅(linux使用python)
- 学习python处理python编码问题
- python实现博客文章爬虫示例