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

发布时间:2022-11-12

本文目录一览:

  1. python(unsubscriptable object异常)
  2. python 一次操作发生多次相同异常如何处理?
  3. 关于python教程中处理异常的问题
  4. Python之异常处理(try的基本用法)
  5. Python中异常重试的解决方案详解
  6. 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_minwait_random_max:用随机的方式产生两次retrying之间的停留时间
  • wait_exponential_multiplierwait_exponential_max:以指数的形式产生两次retrying之间的停留时间,产生的值为2^previous_attempt_number * wait_exponential_multiplierprevious_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:除数为零