热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Python学习第十天——《AByteofPython》笔记10

Backtoschool很遗憾,打卡记录未到两位数就嘎然而至,因工作虽然昨天看了一部分,但是没时间做笔记。所以做事情还是要有规划,要放提前量,戒之拖拉。Exceptions(异常)

《Python学习第十天——《A Byte of Python》笔记 10》 Back to school

很遗憾,打卡记录未到两位数就嘎然而至,因工作虽然昨天看了一部分,但是没时间做笔记。
所以做事情还是要有规划,要放提前量,戒之拖拉

Exceptions(异常)

我们的程序常会因异常情况导致出错,比如我们要读一个文件但文件不存在,不小心删除了正在运行的某程序,这些都要用Exceptions来控制。

Errors(错误)

简单的以Print和print函数来举例,Python提示了一个语法错误:

>>> Print("hello")
Traceback (most recent call last):
File "", line 1, in
NameError: name 'Print' is not defined
>>> print('hello')
hello

Exceptions(异常)

Windows系统,在接受用户输入时,最后结尾时不按回车而按[ctrl-c],就会提示KeyboardInterrupt(键盘中断)

>>> s=input("Enter something")
Enter something Traceback(most recent call last):Traceback (most recent call last):
File "", line 1, in
KeyboardInterrupt
>>>

如果用的是苹果Mac,按[ctrl-d][ctrl-d]是文末的标识,但是Python没有找到文末,所以会出现一个EOFError的错误提示

Handling Exceptions(控制异常)

我们用try…except*语句来控制异常,普通语句我们放在try块中,出错处理放在excetp块中

try:
text=input('Enter something:')
except EOFError:
print('Why did you do an EOF on me?')
except KeyboardInterrupt:
print('You cancelled the operation.')
else:
print('you entered {}'.format(text))

Output:

Enter something:^D
Why did you do an EOF on me?
Enter something:12345
you entered 12345

Raising Exceptions(抛出异常)

定义一个ShortInputException类,当用户输入没有达到最低长度要求,抛出异常。

class ShortInputException(Exception):
'''A user-defined exception class.'''
def __init__(self,length,atleast):
Exception.__init__(self)
self.length=length
self.atleast=atleast
try:
text = input('Enter something --> ')
if len(text) <3:
raise ShortInputException(len(text), 3)
# Other work can continue as usual here
except EOFError:
print('Why did you do an EOF on me?')
except ShortInputException as ex:
print(('ShortInputException: The input was ' +
'{0} long, expected at least {1}')
.format(ex.length, ex.atleast))
else:
print('No exception was raised.')

Output:

Enter something &#8211;> ok
ShortInputException: The input was 2 long, expected at least 3
Enter something &#8211;> good
No exception was raised.

Try &#8230; Finally

在程序在读一个文件时,如果出现一个异常,我们怎么保证文件对象是否被马上关闭了? 我们可以用finally

import sys
import time
f = None
try:
f = open("poem.txt")
# Our usual file-reading idiom
while True:
line = f.readline()
if len(line) == 0:
break
print(line, end='')
sys.stdout.flush()
print("Press ctrl+c now")
# To make sure it runs for a while
time.sleep(2)
except IOError:
print("Could not find file poem.txt")
except KeyboardInterrupt:
print("!! You cancelled the reading from the file.")
finally:
if f:
f.close()
print("(Cleaning up: Closed the file)")

Output:(用PyCharm一直按不下ctrl+c,本来想代替,O(∩_∩)O 后来在DOS编译器下运行,一开始找不到poem.txt,后来cd到该.py目录下,然后再编译器执行,搞定。)

Programming is fun
Press ctrl+c now
When the works is done
Press ctrl+c now
!!You cancelled the reading from the file.
(cleaning up: closed the file)

The with statement(with 语句)

在try 块中获得资源,随后又在finally 块中释放资源,这是一种常见的模式。今
后,也有一种with 语句能以清晰的方式完成这样的功能。

with open("poem.txt") as f:
for line in f:
print(line,end='')

(ps.下面这一段不甚明白,姑且先抄下先)
输出与前面例子的输出一样,用with open 就能使得在结束的时候自动关闭文件。在屏幕后面发生的事情就是with 语句使用了一种协议。获得了open 语句返回的对象,就叫做’thefile’ 好了。
在启动代码块之前,在后台总会调用thefile.__ enter__ 函数,在代码块结束后又会调用thefile.__ exit__ 函数。
所以我们用finally 块写的代码应该自行注意__ exit__ 方法。这就能帮助我们避免反复使用显式的try..finally 语句。

持之以恒,方得始终


推荐阅读
  • Go从入门到精通系列视频之go编程语言密码学哈希算法(二) ... [详细]
  • 本文详细介绍了如何在Oracle VM VirtualBox中实现主机与虚拟机之间的数据交换,包括安装Guest Additions增强功能,以及如何利用这些功能进行文件传输、屏幕调整等操作。 ... [详细]
  • Maven + Spring + MyBatis + MySQL 环境搭建与实例解析
    本文详细介绍如何使用MySQL数据库进行环境搭建,包括创建数据库表并插入示例数据。随后,逐步指导如何配置Maven项目,整合Spring框架与MyBatis,实现高效的数据访问。 ... [详细]
  • 本文介绍了如何通过C#语言调用动态链接库(DLL)中的函数来实现IC卡的基本操作,包括初始化设备、设置密码模式、获取设备状态等,并详细展示了将TextBox中的数据写入IC卡的具体实现方法。 ... [详细]
  • 在OpenCV 3.1.0中实现SIFT与SURF特征检测
    本文介绍如何在OpenCV 3.1.0版本中通过Python 2.7环境使用SIFT和SURF算法进行图像特征点检测。由于这些高级功能在OpenCV 3.0.0及更高版本中被移至额外的contrib模块,因此需要特别处理才能正常使用。 ... [详细]
  • 本文探讨了如何在PHP与MySQL环境中实现高效的分页查询,包括基本的分页实现、性能优化技巧以及高级的分页策略。 ... [详细]
  • td{border:1pxsolid#808080;}参考:和FMX相关的类(表)TFmxObjectIFreeNotification ... [详细]
  • 处理Android EditText中数字输入与parseInt方法
    本文探讨了如何在Android应用中从EditText组件安全地获取并解析用户输入的数字,特别是用于设置端口号的情况。通过示例代码和异常处理策略,展示了有效的方法来避免因非法输入导致的应用崩溃。 ... [详细]
  • 本文介绍了多维缩放(MDS)技术,这是一种将高维数据映射到低维空间的方法,通过保持原始数据间的关系,以便于可视化和分析。文章详细描述了MDS的原理和实现过程,并提供了Python代码示例。 ... [详细]
  • 本文介绍了如何利用jQuery实现对网页上多个div元素的显示与隐藏控制,包括基本的toggle方法及更复杂的显示隐藏逻辑。 ... [详细]
  • 我的读书清单(持续更新)201705311.《一千零一夜》2006(四五年级)2.《中华上下五千年》2008(初一)3.《鲁滨孙漂流记》2008(初二)4.《钢铁是怎样炼成的》20 ... [详细]
  • MySQL InnoDB 存储引擎索引机制详解
    本文深入探讨了MySQL InnoDB存储引擎中的索引技术,包括索引的基本概念、数据结构与算法、B+树的特性及其在数据库中的应用,以及索引优化策略。 ... [详细]
  • 本文深入探讨了Go语言中的接口型函数,通过实例分析其灵活性和强大功能,帮助开发者更好地理解和运用这一特性。 ... [详细]
  • Windows操作系统提供了Encrypting File System (EFS)作为内置的数据加密工具,特别适用于对NTFS分区上的文件和文件夹进行加密处理。本文将详细介绍如何使用EFS加密文件夹,以及加密过程中的注意事项。 ... [详细]
  • 本文详细介绍了如何在Apache Kafka中进行Topic级别的配置,包括创建、修改和删除配置参数的具体步骤,并提供了详细的配置属性表。 ... [详细]
author-avatar
绅(bian)士(tai)
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有