1.声明异常语法规则
-
try-finally语句
try:
检测范围
except Exception[as reason]:
出现异常(Exception)后的处理代码
finally:
无论如何都会被执行的代码
一个 try 语句可以和多个 except 语句搭配,因为 try 语句块中可能出现多类异常,利用多个 except 语句可以分别捕获并处理我们感兴趣的异常。
except (OSError, TypeError, ValueError) as reason:
print('出错了\n错误原因是:' + str(reason))
-
raise语句
用于声明一个异常
>>> raise ZeroDivisionError('除数为零的异常')
Traceback (most recent call last):
File "<pyshell#1>", line 1, in <module>
raise ZeroDivisionError('除数为零的异常')
ZeroDivisionError: 除数为零的异常
实例:尝试一个新的函数 int_input(),当用户输入整数的时候正常返回,否则提示出错并要求重新输入
def int_input(prompt=''):
while True:
try:
int(input(prompt))
break
except ValueError:
print('出错,您输入的不是整数!')
int_input("请输入一个整数:")
2.else语句和with语句的运用
else语句
- 用法一:
if a>b:
print(a)
else:
print(b)
- 用法二:
#******************************************#
# 判断给定数的最大公约数,如果是素数,则打印 #
#******************************************#
def showMaxFactor(num):
count = num//2
while count > 1:
if num % count == 0:
print('%d最大的约数是%d' %(num,count))
break
count -= 1
else:
# 只有循环完成后才执行,如果循环中执行使用到break,则else不执行
print('%d是素数!' %num)
num = int(input('请输入一个数:'))
showMaxFactor(num)
- 用法三
try:
print(int('abc'))
except ValueError as reason:
print('出错啦:' + reason)
else:
# 如果没有出错
print('没有任何异常!')
with语句
with context_expression [as target(s)]:
with-body
#**********************************#
# 异常处理配合with语句 #
# 可以避免已打开文件没关闭的情况 #
#**********************************#
try:
with open('data.txt', 'w') as f:
for each_line in f:
print(each_line)
except OSError as reason:
print('出错啦:' + str(reason))
3.Python标准异常总结
异常名称 | 解释 |
---|---|
AssertionError | 断言语句(assert)失败:当assert关键字后边的条件为假时,程序将抛出该异常,一般用于在代码中置入检查点
|
AttributeError | 尝试访问未知的对象属性:当试图访问的对象属性不存在时抛出的异常
|
EOFError | 这个错误基本上是意味着它发现了一个不期望的文件尾。(UNIX上为Ctrl+d,Windows上为Ctrl+Z+Enter) |
FloatingPointError | 浮点计算错误 |
GeneratorExit | Gengeator.close()方法被调用的时候 |
ImportError | 导入模块失败的时候 |
IndexError | 索引超出序列的范围 |
KeyError | 字典中查找一个不存在的关键字 |
KeyboardError | 用户输入中断键(Ctrl+c) |
MemoryError | 内存溢出(可通过删除对象释放内存) |
NameError | 尝试访问一个不存在的变量 |
NotImplementedError | 尚未实现的方法 |
OSError | 操作系统产生的异常(例如打开一个不存在的文件) |
OverflowError | 数值运算超出最大限制 |
ReferenceError | 弱引用(weak reference)试图访问一个已经被垃圾回收几只回收了的对象 |
RuntimeError | 一般的运行时错误 |
StopIteration | 迭代器没有更多的值 |
SyntaxError | Python的语法错误 |
IndentationError | 缩进错误 |
TabError | Tab和空格混合使用 |
SystemError | Python编译器系统错误 |
SystenExit | Python编译器进程被关闭 |
TypeError | 不同类型间的无效操作 |
UnboundLocalError | 访问一个未初始化的本地变量(NameError的子类) |
UnicodeError | Unicode相关的错误(ValueError的子类) |
UnicodeEncodeError | Unicode编码时的错误(UnicodeError的子类) |
UnicodeDecodeError | Unicode解码时的错误(UnicodeError的子类) |
UnicodeTranslateError | Unicode转换时的错误(UnicodeError的子类) |
ValueError | 传入无效的参数 |
ZeroDivisionError | 除数为零 |