return 语句和异常处理问题
由于 return 有两种作用:结束方法运行、返回值。我们一般不把 return 放到异常处理结构中,而是放到方法最后。
【例1.1】异常结构中return的使用方式
def test01():
print('step1')
try:
x = 3 / 0
# return 'a'
except:
print('step2')
print('异常:0不能作为除数')
# return 'b'
finally:
print('step3')
# return 'c'
print('step4')
return 'd' # 老师:一般不要把return语句放到try、except、else、finally块中,会发生一些意想不到的错误。建议放到最后。
print(test01())
运行结果:
【例1.2】异常结构中return的使用方式
return不在最后,所以执行到return本来程序执行要终止,但是还是会把finally块的代码执行完,之后就不执行了。
def test01():
print('step1')
try:
x = 3 / 0
# return 'a'
except:
print('step2')
print('异常:0不能作为除数')
return 'b'
finally:
print('step3')
# return 'c'
print('step4')
# return 'd' # 一般不要把return语句放到try、except、else、finally块中,会发生一些意想不到的错误。建议放到最后。
print(test01())
运行结果:
常见异常的解决
Python 中的异常都派生自 BaseException 类,本课时我们列举一些常见的异常,方便初学者掌握。
1.SyntaxError:语法错误
2.NameError:尝试访问一个没有申明的变量
3.ZeroDivisionError:除数为 0 错误(零除错误)
4.ValueError:数值错误
4.1
4.2
5.TypeError:类型错误
6.AttributeError:访问了对象不存在的属性
a = 1
a.kk()
运行报错内容:
7.IndexError:访问的索引超出了范围
a = [1, 2, 3]
a[5]
运行报错内容:
8.KeyError:字典的关键字不存在
a = {'name': '李明', 'age': 18, 'salary': 8000}
a['sex']
运行报错内容:
常见异常汇总
按字母顺序排列
异常名称 | 说明 |
---|---|
ArithmeticError | 所有数值计算错误的基类 |
AssertionError | 断言语句失败 |
AttributeError | 对象没有这个属性 |
BaseException | 所有异常的基类 |
DeprecationWarning | 关于被弃用的特征的警告 |
EnvironmentError | 操作系统错误的基类 |
EOFError | 没有内建输入,达到EOF标记 |
Exception | 常规错误的基类 |
FloatPointError | 浮点计算错误 |
FutureWarning | 关于构造语义将来会有改变的警告 |
GeneratorExit | 生成器(generator)发生异常,通知退出 |
ImportError | 导入模块/对象失败 |
IndentationError | 缩进错误 |
IndexError | 序列中没有此索引 |
IOError | 输入/输出操作失败 |
KeyboardInterrupt | 用户中断执行(通常是输入^C) |
KeyError | 映射中没有这个键 |
LookupError | 无效查询的基类 |
MemoryError | 内存溢出错误(对Python解释器来说不是致命的) |
NameError | 未声明/初始化对象(没有属性) |
NotImplementedError | 尚未实现的方法 |
OSError | 操作系统错误 |
OverflowError | 数值运算超出最大限制 |
OverflowWarning | 旧的关于自动提升为长整型(long)的警告 |
PendingDeprecationWarning | 关于特性将会被废弃的警告 |
ReferenceError | 弱引用(Weak Reference)试图访问已经垃圾回收了的对象 |
RuntimeError | 一般的运行时错误 |
RuntimeWarning | 可以的运行时行为(Runtime Behavior)的警告 |
StandardError | 所有内建标准异常的基类 |
StopIteration | 迭代器没有更多的值 |
SyntaxError | Python语法错误 |
SyntaxWarning | 可以的语法的警告 |
SystemError | 一般的解释器系统错误 |
SystemExit | 解释器请求退出 |
TabError | Tab和空格键混用 |
TypeError | 对类型无效的操作 |
UnboundLocalError | 访问未初始化的本地变量 |
UnicodeDecodeError | Unicode编码时的错误 |
UnicodeError | Unicode相关的错误 |
UnicodeTranslateError | Unicode转换时的错误 |
UserWarning | 用户代码生成的警告 |
ValueError | 传入无效的参数 |
Warning | 警告的基类 |
WindowsError | 系统调用失败 |
ZeroDivisionError | 除(或取模)零(所有数据类型) |