天天看点

Python基础:异常处理Python基础:异常处理打开文件出错数值出错原因是:invalid literal for int() with base 10: ‘abc’An exception flew by!

Python基础:异常处理

一,学习的内容

Python 异常处理

异常就是运行期检测到的错误。计算机语言针对可能出现的错误定义了异常类型,某种错误引发对应的异常时,异常处理程序将被启动,从而恢复程序的正常运行。

  1. Python 标准异常总结

BaseException:所有异常的 基类

Exception:常规异常的 基类

StandardError:所有的内建标准异常的基类

ArithmeticError:所有数值计算异常的基类

FloatingPointError:浮点计算异常

OverflowError:数值运算超出最大限制

ZeroDivisionError:除数为零

AssertionError:断言语句(assert)失败

AttributeError:尝试访问未知的对象属性

EOFError:没有内建输入,到达EOF标记

EnvironmentError:操作系统异常的基类

IOError:输入/输出操作失败

OSError:操作系统产生的异常(例如打开一个不存在的文件)

WindowsError:系统调用失败

ImportError:导入模块失败的时候

KeyboardInterrupt:用户中断执行

LookupError:无效数据查询的基类

IndexError:索引超出序列的范围

KeyError:字典中查找一个不存在的关键字

MemoryError:内存溢出(可通过删除对象释放内存)

NameError:尝试访问一个不存在的变量

UnboundLocalError:访问未初始化的本地变量

ReferenceError:弱引用试图访问已经垃圾回收了的对象

RuntimeError:一般的运行时异常

NotImplementedError:尚未实现的方法

SyntaxError:语法错误导致的异常

IndentationError:缩进错误导致的异常

TabError:Tab和空格混用

SystemError:一般的解释器系统异常

TypeError:不同类型间的无效操作

ValueError:传入无效的参数

UnicodeError:Unicode相关的异常

UnicodeDecodeError:Unicode解码时的异常

UnicodeEncodeError:Unicode编码错误导致的异常

UnicodeTranslateError:Unicode转换错误导致的异常

  1. Python标准警告总结

Warning:警告的基类

DeprecationWarning:关于被弃用的特征的警告

FutureWarning:关于构造将来语义会有改变的警告

UserWarning:用户代码生成的警告

PendingDeprecationWarning:关于特性将会被废弃的警告

RuntimeWarning:可疑的运行时行为(runtime behavior)的警告

SyntaxWarning:可疑语法的警告

ImportWarning:用于在导入模块过程中触发的警告

UnicodeWarning:与Unicode相关的警告

BytesWarning:与字节或字节码相关的警告

ResourceWarning:与资源使用相关的警告

总结:

AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x

IOError 输入/输出异常;基本上是无法打开文件

ImportError 无法引入模块或包;基本上是路径问题或名称错误

IndentationError 语法错误(的子类) ;代码没有正确对齐

IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]

KeyError 试图访问字典里不存在的键

KeyboardInterrupt Ctrl+C被按下

NameError 使用一个还未被赋予对象的变量

SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了)

TypeError 传入对象类型与要求的不符合

UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,导致你以为正在访问它

ValueError 传入一个调用者不期望的值,即使值的类型是正确的

  1. try - except 语句

(1)单个分支

try:
     检测范围
except Exception[as reason]:
     出现异常后的处理代码
           

try 语句按照如下方式工作:

首先,执行try子句(在关键字try和关键字except之间的语句)

如果没有异常发生,忽略except子句,try子句执行后结束。

如果在执行try子句的过程中发生了异常,那么try子句余下的部分将被忽略。如果异常的类型和except之后的名称相符,那么对应的except子句将被执行。最后执行try - except语句之后的代码。

如果一个异常没有与任何的except匹配,那么这个异常将会传递给上层的try中。

eg:

1,try:

2,f = open(‘test.txt’)

3 print(f.read())

4 ,f.close()

5,except OSError:

6 print(‘打开文件出错’)

打开文件出错

(2)多个分支

一个try语句可能包含多个except子句,分别来处理不同的特定的异常。最多只有一个分支会被执行。

【例子】

1,try:

2,int(“abc”)

3,s = 1 + ‘1’

4,f = open(‘test.txt’)

5,print(f.read())

6,f.close()

7,except OSError as error:

8,print(‘打开文件出错\n原因是:’ + str(error))

9,except TypeError as error:

10, print(‘类型出错\n原因是:’ + str(error))

11 ,except ValueError as error:

12, print(‘数值出错\n原因是:’ + str(error))

数值出错

原因是:invalid literal for int() with base 10: ‘abc’

4, try - except - finally 语句

try: 检测范围 except Exception[as reason]: 出现异常后的处理代码 finally: 无论如何都会被执行的代码

不管try子句里面有没有发生异常,finally子句都会执行

5,try - except - else 语句

如果在try子句执行时没有发生异常,Python将执行else语句

6,raise语句

Python 使用raise语句抛出一个指定的异常。

例子】

try:

raise NameError(‘HiThere’)

except NameError:

print(‘An exception flew by!’)

An exception flew by!

二,难题解惑

1,try-except

这个我真的有点懵,但是我询问了朋友和百度,终于明白一点了

Python 提供了try except语句捕获并处理异常,该异常处理语句的基本语法结构如下:

try:

可能产生异常的代码块

except [(Error1, Error2, …) [as e]]:

处理异常的代码块1

except [(Error3, Error4, …) [as e]]:

处理异常的代码块2

该格式中,[] 括起来的部分可以使用,也可以省略;(Error1,Error2,…) 、(Error3,Error4,…) 表示各自的 except 块可以处理异常的具体类型;[as e] 表示将异常类型赋值给变量 e(方便在 except 块中调用异常类型)。

注意,except 后面也可以不指定具体的异常名称,这样的话,表示要捕获所有类型的异常。

另外,从 try except 的基本语法格式可以看出,try 块仅有一个,但 except 代码块可以有多个,这是为了针对不同的异常类型提供不同的异常处理方式。当程序发生不同的意外情况时,会对应不同的异常类型,Python 解释器就会根据该异常类型来决定使用哪个 except 块来处理该异常。

eg:

try:

a = int(input(“输入被除数:”))

b = int(input(“输入除数:”))

c = a / b

print(“您输入的两个数相除的结果是:”, c )

except (ValueError, ArithmeticError):

print(“程序发生了数字格式异常、算术异常之一”)

except :

print(“未知异常”)

print(“程序继续运行”)

程序运行结果为:

输入被除数:a

17:33:20

程序发生了数字格式异常、算术异常之一

程序继续运行

上面程序中,第 6 行代码使用了(ValueError, ArithmeticError)来指定所捕获的异常类型,这就表明该 except 块可以同时捕获这 2 种类型的异常;第 8 行代码只有 except 关键字,并未指定具体要捕获的异常类型,这种省略异常类的 except 语句也是合法的,它表示可捕获所有类型的异常,一般会作为异常捕获的最后一个 except 块。

2, try - except - finally/else

try:

可能触发异常的语句

except 错误类型1 [as 变量2]:

异常处理语句1

except 错误类型2 [as 变量2]:

异常处理语句2

except (错误类型3,错误类型4,······) [as 变量3]:

异常处理语句3

except:

异常处理语句other

else:

未发生异常的语句

finally:

最终语句

eg: 17:34:49

def f():

try:

print(1)

return 1

except:

print(2)

return 2

else:

print(3)

return 3

finally:

print(4)

return 4

1

4

4

了解更多分析及数据抓取可查看:

http://cloud.yisurvey.com:9081/html/d8acf20b-342f-4806-8dcc-5e6a8d00881d.html?ly=csdn

本文转载自互联网、仅供学习交流,内容版权归原作者所有,如涉作品、版权和其他问题请联系我们删除处理。

特别说明:本文旨在技术交流,请勿将涉及的技术用于非法用途,否则一切后果自负。如果您觉得我们侵犯了您的合法权益,请联系我们予以处理。