Ⅰ python中异常处理的问题
意思是在使用with这个关键字操作文件的时候不需要额外的处理异常,也就是把下边的第一段代码,替换成了第二段代码,但是功能相同
try:
f=open('file_name','r')
finally:
f.close()
withopen('file_name','r')asf:
foriinf:
None
Ⅱ 关于python异常代码编写的问题
下一步就是解析json(实际上是dict),得出code的值
Ⅲ python的异常处理语句
捕捉异常可以使用try/except语句。
try/except语句用来检测try语句块中的错误,从而让except语句捕获异常信息并处理。
如果你不想在异常发生时结束你的程序,只需在try里捕获它。
语法:
以下为简单的try....except...else的语法:
try:
<语句> #运行别的代码
except <名字>:
<语句> #如果在try部份引发了'name'异常
except <名字>,<数据>:
<语句> #如果引发了'name'异常,获得附加的数据
else:
<语句> #如果没有异常发生
try的工作原理是,当开始一个try语句后,python就在当前程序的上下文中作标记,这样当异常出现时就可以回到这里,try子句先执行,接下来会发生什么依赖于执行时是否出现异常。
Ⅳ Python异常
这段代码在matplotlib 2.0.2 运行正常,会不会是你的matplotlib太旧了?
Ⅳ Python中异常重试的解决方案详解
Python中异常重试的解决方案详解
大家在做数据抓取的时候,经常遇到由于网络问题导致的程序保存,先前只是记录了错误内容,并对错误内容进行后期处理。
原先的流程:
def crawl_page(url):
pass
def log_error(url):
pass
url = ""
try:
crawl_page(url)
except:
log_error(url)
改进后的流程:
attempts = 0
success = False
while attempts < 3 and not success:
try:
crawl_page(url)
success = True
except:
attempts += 1
if attempts == 3:
break
最近发现的新的解决方案:retrying
retrying是一个 Python的重试包,可以用来自动重试一些可能运行失败的程序段。retrying提供一个装饰器函数retry,被装饰的函数就会在运行失败的条件下重新执行,默认只要一直报错就会不断重试。
import random
from retrying import retry
@retry
def do_something_unreliable():
if random.randint(0, 10) > 1:
raise IOError("Broken sauce, everything is hosed!!!111one")
else:
return "Awesome sauce!"
print do_something_unreliable()
如果我们运行have_a_try函数,那么直到random.randint返回5,它才会执行结束,否则会一直重新执行。
retry还可以接受一些参数,这个从源码中Retrying类的初始化函数可以看到可选的参数:
stop_max_attempt_number:用来设定最大的尝试次数,超过该次数就停止重试
stop_max_delay:比如设置成10000,那么从被装饰的函数开始执行的时间点开始,到函数成功运行结束或者失败报错中止的时间点,只要这段时间超过10秒,函数就不会再执行了
wait_fixed:设置在两次retrying之间的停留时间
wait_random_min和wait_random_max:用随机的方式产生两次retrying之间的停留时间
wait_exponential_multiplier和wait_exponential_max:以指数的形式产生两次retrying之间的停留时间,产生的值为2^previous_attempt_number * wait_exponential_multiplier,previous_attempt_number是前面已经retry的次数,如果产生的这个值超过了wait_exponential_max的大小,那么之后两个retrying之间的停留值都为wait_exponential_max。这个设计迎合了exponential backoff算法,可以减轻阻塞的情况。
我们可以指定要在出现哪些异常的时候再去retry,这个要用retry_on_exception传入一个函数对象:
def retry_if_io_error(exception):
return isinstance(exception, IOError)
@retry(retry_on_exception=retry_if_io_error)
def read_a_file():
with open("file", "r") as f:
return f.read()
在执行read_a_file函数的过程中,如果报出异常,那么这个异常会以形参exception传入retry_if_io_error函数中,如果exception是IOError那么就进行retry,如果不是就停止运行并抛出异常。
我们还可以指定要在得到哪些结果的时候去retry,这个要用retry_on_result传入一个函数对象:
def retry_if_result_none(result):
return result is None
@retry(retry_on_result=retry_if_result_none)
def get_result():
return None
在执行get_result成功后,会将函数的返回值通过形参result的形式传入retry_if_result_none函数中,如果返回值是None那么就进行retry,否则就结束并返回函数值。
Ⅵ 请教:python如何处理异常
异常种类
python中的异常种类非常多,每个异常专门用于处理某一项异常!!!
下面是一些常用的异常:
异常基础
在编程过程中为了增加友好性、容错性和健壮性,在程序出现bug时一般不会将错误信息显示给用户,而是现实一个提示的页面,通俗来说就是不让用户看见大黄页!!!还有,有时我们不希望一个小bug的出现让整个程序都崩溃,自动退出或者蓝屏,我们需要抓取这个错误异常,并进行处理,让用户能够继续使用下去。
注:在python3中,except Exception , ex的别名方法已经不能使用,逗号被认为是两种异常的分隔符,而不是取别名。
下面是一个实例:
更多的异常在这里:
如果程序发生的异常不在你设定的异常之中,那么依然会报错。
这个例子中,你只设置了捕获IndexError,而实际会发生一个ValueError,因此它依然会报错。
要同时捕获多个异常如何写呢?
程序会按异常的先后顺序进行捕获,任意一个被捕获,则进行异常处理,并忽略try会后的代码和别的异常处理代码。
万能异常:Exception
在python的异常中,有一个万能异常:Exception,他可以捕获任意异常,相当于一个人把所有的活全干了。那你可能要问了,既然有这个万能异常,其他异常是不是就可以不需要了!
当然不是,对于特殊处理或提醒的异常需要先定义,用于准确判断错误类型,存储错误日志,而最后定义Exception用来确保程序正常运行。
Ⅶ Python 网页打开异常捕获
可以直接就写个except,捕获所有异常,也可以自己指定异常哇,比如常见的Timeout、IOError、HTTPError等等
Ⅷ Python中的异常
没有定义a就使用了。
Ⅸ python异常处理
try后面接except或finally这两个只能用一个,用了except就不能用finally