十九. Python基础(19)--异常

时间:2022-01-04 05:18:33

十九. Python基础(19)--异常

1 ● 捕获异常

if VS异常处理:

if是预防异常出现, 异常处理是处理异常出现

异常处理一般格式:

try:

    <...............> #可能得到异常的语句

except <.......>:     #捕获是哪种异常

    <...............> #出现异常的处理方法

except <.......>:     #捕获是哪种异常

    <...............> #出现异常的处理方法

else:

    < ............... > # 没有出现异常的处理方法

finally:

    < ............... > # 最后一定会执行的语句

try:

     #lst = [2,4,6]

     #print(lst.index(5))

     print("##########") # 如果上面的语句触发异常, 这一句不再执行, 下面的语句也都不会执行, 但是finally语句块的语句会执行

     print(sum(1,2,3))

     print("##########")

     f =open('file.txt') # 如果上面的语句出错, 这一句就不会执行了, finally里面的语句也会因此提示出错.

     print(f.read())

# 程序出现异常后, 会按照下面的顺序依次匹配, 最先匹配到哪个异常就捕获哪个异常.

# 在我们不能完全明确地知道这个错误到底是发生了什么的时候, 就用as 变量名, 将变量中储存的错误信息打印出来.

except ValueError as msg: # 或者写成except ValueError, msg

    print("5不在列表中:", msg) # 5不在列表中: 5 is not in list

# 如果写成: except ValueError: 那么就不会打印python内部的定义的错误提示.

except Exception as e:

    print("出现某种异常:", e) # 出现某种异常: sum expected at most 2 arguments, got 3

# Exception是万能异常类,对于可预见的异常错误, 我们最好用已知的异常类型. 否则才用万能异常类.

# 上面的print(sum(1, 2, 3))这一句实际上触发了TypeError异常, 所以最好把Exception改为TypeError

else: # try代码块中没有捕获到异常的时候才会执行

    print("程序没有出现异常!")

finally: # finally代码块中的代码一定会执行; 主要做清理的工作, 把之前的打开的链接, 文件等关闭掉.

    f.close()

# 如果连用else和finally, else要写在finally之前.

 

2 ● 自定义异常 & 类抛出异常

raise语句(比if 语句更暴力, 捕获异常后, 直接停止程序)

class MyError(BaseException):

    def __init__(self, msg):

        self.msg = msg

    def __str__(self):

        return self.msg

 

file_name = input("pls input file name:")

 

if file_name == 'hello':

    raise MyError('file name can\'t be "hello"!')

 

'''

pls input file name:hello

Traceback (most recent call last):

File "D:/python_projects/s7code/day21/test_day21.py", line 172, in <module>

    raise MyError('file name can\'t be "hello"!')

__main__.MyError: file name can't be "hello"!

'''

 

# 程序要求用户输入一个文件名,

# 如果用户输入的文件名是hello, 那么抛出一个NameError的异常

# 用户输入hello 和MyError异常之间没有任何必然联系

# 我们只是人为的通过raise来这样定义

# 我们当然也可以定义成TypeError或其它名称, 但我定义的异常类型必须是python提供的或派生的

 

3 ● assert语句

1、assert语句用来声明某个条件是真的。

2、如果你非常确信某个条件为真(比如数学公理之类的),而你想要检验这一点,并且在它非真的时候引发一个错误,那么assert语句是应用在这种情形下的理想语句。

3、当assert语句失败的时候,会引发一AssertionError。

def KelvinToCelsius(t):

    assert (t >= 0), "Colder than absolute zero!"

    return t - 273

 

print(KelvinToCelsius(1)) # -272

print(KelvinToCelsius(-5)) # AssertionError: Colder than absolute zero!

 

# 注意, assert语句可以写成assert t>= 0,"Colder than absolute zero!",

# 但不能写成assert((Temperature >= 0),"Colder than absolute zero!")

# 因为在python2,3中,assert都是一个语句(statement)

# 不像print在python3中变成了一个函数。

 

4 ● except:pass

except:

    pass # 如果在循环体内, 这个pass要写成pass

# 程序捕获到异常时, 直接退出程序, 这是个不好的编程习惯, 但要了解这种写法.

 

十九. Python基础(19)--异常的更多相关文章

  1. 十八&period; Python基础&lpar;18&rpar;常用模块

    十八. Python基础(18)常用模块 1 ● 常用模块及其用途 collections模块: 一些扩展的数据类型→Counter, deque, defaultdict, namedtuple, ...

  2. 十二&period; Python基础&lpar;12&rpar;--生成器

    十二. Python基础(12)--生成器 1 ● 可迭代对象(iterable) An object capable of returning its members one at a time. ...

  3. 九&period; Python基础&lpar;9&rpar;--命名空间&comma; 作用域

    九. Python基础(9)--命名空间, 作用域 1 ● !a 与 not a 注意, C/C++可以用if !a表示if a == 0, 但是Python中只能用if not a来表示同样的意义. ...

  4. 二十六&period; Python基础&lpar;26&rpar;--类的内置特殊属性和方法

    二十六. Python基础(26)--类的内置特殊属性和方法 ● 知识框架 ● 类的内置方法/魔法方法案例1: 单例设计模式 # 类的魔法方法 # 案例1: 单例设计模式 class Teacher: ...

  5. 二十五&period; Python基础&lpar;25&rpar;--模块和包

    二十五. Python基础(25)--模块和包 ● 知识框架   ● 模块的属性__name__ # my_module.py   def fun1():     print("Hello& ...

  6. 二十四&period; Python基础&lpar;24&rpar;--封装

    二十四. Python基础(24)--封装 ● 知识结构   ● 类属性和__slots__属性 class Student(object):     grade = 3 # 也可以写在__slots ...

  7. 二十二&period; Python基础&lpar;22&rpar;--继承

    二十二. Python基础(22)--继承 ● 知识框架   ● 继承关系中self的指向 当一个对象调用一个方法时,这个方法的self形参会指向这个对象 class A:     def get(s ...

  8. 十六&period; Python基础&lpar;16&rpar;--内置函数-2

    十六. Python基础(16)--内置函数-2 1 ● 内置函数format() Convert a value to a "formatted" representation. ...

  9. 十五&period; Python基础&lpar;15&rpar;--内置函数-1

    十五. Python基础(15)--内置函数-1 1 ● eval(), exec(), compile() 执行字符串数据类型的python代码 检测#import os 'import' in c ...

随机推荐

  1. 百度之星初赛2A 1001 ALL X(HDU 5690)

    All X Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submi ...

  2. AC算法 及python实现

    零 导言 软件安全课上,老师讲了AC算法,写个博客,记一下吧. 那么AC算法是干啥的呢? ——是为了解决多模式匹配问题.换句话说,就是在大字符串S中,看看小字符串s1, s2,...有没有出现. AC ...

  3. hdu 4982 Goffi and Squary Partition

    Goffi and Squary Partition Time Limit: / MS (Java/Others) Memory Limit: / K (Java/Others) Total Subm ...

  4. nginx缓存配置的操作记录梳理

    web缓存位于内容源Web服务器和客户端之间,当用户访问一个URL时,Web缓存服务器会去后端Web源服务器取回要输出的内容,然后,当下一个请求到来时,如果访问的是相同的URL,Web缓存服务器直接输 ...

  5. ubuntu下phpstorm无法输入中文的解决办法

    http://blog.csdn.net/woshiliulei0/article/details/51657356 今天期待已久的搜狗输入法linux版上线了,对于我们这种之前用习惯了搜狗输入法的屌 ...

  6. 循环对XML文档添加Attribute以及移除Element 【转】

    如下面的图片要求,需要把左边的xml文改为右边的文档. 需要添加Attribute,移除Element,但是所添加的Attribute值已经跟被移除的Element值不相同.实现方法可以参考<对 ...

  7. &lbrack;Oracle&rsqb;高水位标记(HWM)

    (一)高水位标记(High Water Mark,HWM)的概念 所谓高水位标记,是指一个已经分配的段中,已经使用的空间与未使用的空间的分界线.在表的使用过程中,随着数据的不断增多(insert),H ...

  8. 【Ztree】前台展示多级菜单,后台配置方法

    第一步.前台HTML页面. <%@ Page Language="C#" AutoEventWireup="true" CodeBehind=" ...

  9. PHP AES的加密解密-----【弃用】

    mcrypt_decrypt在PHP7.*已经被弃用,取而代之的是openssl_decrypt/encrypt,请参考: PHP7.* AES的加密解密 AES加密算法 密码学中的高级加密标准(Ad ...

  10. iframe子页面控制父页面滚动高度,直接蹦到父页面开头

    zepto调用父页面窗口元素的scrollTop()方法会报错,貌似是scrollTop函数中有个scrollTo()方法用到this,指向错误. 经检查, 原生js控制父页面滚动,只能写数字,不能带 ...