本文目录一览:
- python(unsubscriptable object异常)
- python 一次操作发生多次相同异常如何处理?
- 关于python教程中处理异常的问题
- Python之异常处理(try的基本用法)
- Python中异常重试的解决方案详解
- python异常值处理
python(unsubscriptable object异常)
python(unsubscriptable object异常),是设置错误造成的,解决方法如下;
- 首先创建一个py文件,输入
for i in range(10):y=1if i==5:y=0i=i/yprint(i)
代码,如下图所示。 - 运行py文件,可以看到程序运行到i等于5的时候出现了分母为0的异常,程序中断不继续执行,如下图所示。
- 这时将可能出现异常的代码添加try...except...语句,代码如下图。
- 运行py文件,可以看到python已经跳过异常继续执行了,如下图所示。
- 如果是函数调用可能出现异常的话,可以在函数外面使用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
:除数为零