Python_Scrapy_6.错误与异常

来源:互联网 发布:网络机顶盒哪个最好 编辑:程序博客网 时间:2024/06/11 16:27

看了一下官方教程的第二部分,发现用了异常处理机制.因为我的学习计划是围绕着项目进行了,技能点不够用了就去打打怪提升下等级.


0.编程时会出现的错误和异常

a.代码本身的错误,也就是bug.比如 字符串少打了一个引号,引起的语法错误.

b.代码使用者错误的使用代码而产生的问题. 比如需要带入整数的却带入字符串

c.使用代码是因为运行环境的差异而导致的问题. 比如向硬盘里写入数据时硬盘满了或者坏了.


1.try...except...finally

a.基本的使用方法

try...except...finaly 和if,else一样是控制流语句. 先会运行try中的代码,如果某一行代码出现了异常那么就会转跳到except的代码块中,不管程序是否报错都会执行finally中的代码.

# coding:gbktry:    # 错误的路径    f = open(r'C:\Fallout4.txt')    print('1')    print('2')    print('3')    print(f.read())except:    print('哦偶,哪里弄错了.')finally:    print('退出程序')


返回的结果:

哦偶,哪里弄错了.退出程序

# coding:gbktry:    # 正确的路径    f = open(r'C:\test\Fallout4.txt')    print('1')    print('2')    print('3')    print(f.read())except:    print('哦偶,哪里弄错了.')finally:    print('退出程序')

返回的结果

<span style="font-size:18px;"><span style="font-size:18px;">123shut up and take my money.退出程序</span></span>

except还可以加两个参数,需要捕获的错误,和一个错误的原因. 如果有两个except语句,try中的语句快同时又这两个错误,Python只会捕获第一个产生异常(因为直接转跳了).

# coding:gbktry:    # 错误的路径    a    f = open(r'C:\Fallout4.txt')    print('1')    print('2')    print('3')    print(f.read())except NameError, e:    print('哦偶{0}'.format(e))except IOError, e:    print('哦偶{0}'.format(e))finally:    print('退出程序'

2.raise

Python认为一切正常,你却需要程序报错要什么办呢? 用raise自己引发一个异常.

# coding:gbkclass FooError(StandardError):    passdef foo(s):    n = int(s)    if n == 1:        raise FooError('invaild value:{0}'.format(s))    return 10/nfoo(1)

结果

Traceback (most recent call last):  File "C:/Users/bin/PycharmProjects/untitled1/test_raise.py", line 12, in <module>    foo(1)  File "C:/Users/bin/PycharmProjects/untitled1/test_raise.py", line 9, in foo    raise FooError('invaild value:{0}'.format(s))__main__.FooError: invaild value:1


3.with...as 

with...as 语句是try...except...finally的简化版, with之后跟着特殊的对象 as 一个变量赋值给了那个特殊的变量.

with open(r'c:\test\Fallout4.txt') as anything :    print (anything.read())

具体可以看下面两个链接:

使用 with as

详细的说明


0 0
原创粉丝点击