您的位置:

python尝试多次异常的简单介绍

本文目录一览:

python(unsubscriptable object异常)

python(unsubscriptable object异常),是设置错误造成的,解决方法如下;

1、首先创建一个py文件,输入“for i in range(10):y=1if i==5:y=0i=i/yprint(i)”代码,如下图所示。

2、运行py文件,可以看到程序运行到i等于5的时候出现了分母为0的异常,程序中断不继续执行,如下图所示。

3、这时将可能出现异常的代码添加try...except...语句,代码如下图。

4、运行py文件,可以看到python已经跳过异常继续执行了,如下图所示。

5、如果是函数调用可能出现异常的话,可以在函数外面使用try...except...语句,这样程序出现异常了,可以继续执行。

python 一次操作发生多次相同异常如何处理?

进行handle()处理,再次异常,正常逻辑上就不应该再次调用这个函数,除非它是异步的,也就是未来的调用中可能不再抛出异常。

关于python教程中处理异常的问题

EOF为"文件结束符",在linux终端中按Ctrl-D就是向终端输入EOF,在windows的cmd中Ctrl-Z是EOF.

而且在输入后需要按回车键.'\n'代表linux的换行符,就是另起一行的符号,直接输入'\n'只是代表你输入了'\'字符和'n'字符,是两个字符.

Python之异常处理(try的基本用法)

#计算机# #程序员# #python# #代码# #IT#

程序在运行的时候,如果python解释器遇到 不是语法错误 时,会停止程序的执行,并且抛出一些错误的信息进行提示,这就是异常。

方式try-except语句捕获 所有发生的异常 。但这不是一个很好的方式,我们不能通过该程序识别出具体的异常信息。因为它捕获所有的异常,常用于函数最外层进行捕捉未知异常。

1)情况1

2)情况2

3)情况3

当在try块中抛出一个异常,立即执行finally块代码。

finally块中的所有语句执行后,异常被再次触发,并执行except块代码。

在不确定异常是哪个的情况下,常用的except的异常有: Exception、BaseException 。

关注我,坚持每日积累一个技巧, 长期坚持 ,我们将会不断进步。

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 编程,那么你就无法避开异常,因为异常在这门语言里无处不在。打个比方,当你在脚本执行时按 ctrl+c 退出,解释器就会产生一个 KeyboardInterrupt 异常。而 KeyError、ValueError、TypeError 等更是日常编程里随处可见的老朋友。

异常处理工作由“捕获”和“抛出”两部分组成。“捕获”指的是使用 try ... except 包裹特定语句,妥当的完成错误流程处理。而恰当的使用 raise 主动“抛出”异常,更是优雅代码里必不可少的组成部分。

异常分类

BaseException 所有异常的基类

Exception 常见错误的基类

ArithmeticError 所有数值计算错误的基类

Warning 警告的基类

AssertError 断言语句(assert)失败

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

DeprecattionWarning 关于被弃用的特征的警告

EOFError 用户输入文件末尾标志EOF(Ctrl+d)

FloattingPointError 浮点计算错误

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

GeneratorExit generator.close()方法被调用的时候

ImportError 导入模块失败的时候

IndexError 索引超出序列的范围

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

KeyboardInterrupt 用户输入中断键(Ctrl+c)

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

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

NotImplementedError 尚未实现的方法

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

OverflowError 数值运算超出最大限制

OverflowWarning 旧的关于自动提升为长整型(long)的警告

PendingDeprecationWarning 关于特征会被遗弃的警告

ReferenceError 弱引用(weak reference)试图访问一个已经被垃圾回收机制回收了的对象

RuntimeError 一般的运行时错误

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

StopIteration 迭代器没有更多的值

SyntaxError Python的语法错误

SyntaxWarning 可疑的语法的警告

IndentationError 缩进错误

TabError Tab和空格混合使用

SystemError Python编译器系统错误

SystemExit Python编译器进程被关闭

TypeError 不同类型间的无效操作

UnboundLocalError 访问一个未初始化的本地变量(NameError的子类)

UnicodeError Unicode相关的错误(ValueError的子类)

UnicodeEncodeError Unicode编码时的错误(UnicodeError的子类)

UnicodeDecodeError Unicode解码时的错误(UnicodeError的子类)

UserWarning 用户代码生成的警告

ValueError 传入无效的参数

ZeroDivisionError 除数为零