处理语句以处理各种异常

你好,
我正在尝试学习如何使用语句来避免写作:
准备()
尝试:
somings_that_can_raise_someException()
除了某些感觉,err:
DEAL_WITH_SOMEE​​XCEPTION
最后:
Tear_it_down()
冗长,不是很可读.好的,"与"营救?
让我们从PEP中以教科书示例:
用fling('/etc/passwd','r')作为f:
堵塞
好吧,太好了,整洁的"用"在块后关闭文件
完成执行,但是如果文件不存在并尝试打开该怎么办
它提高了ioexception吗?我想能够准确地抓住它
避免写入冗长的尝试:..除:..最后:..块
了解创建"与"的基本原理是
首先说明.
"使用"声明仅允许轻松处理prepar()和
Tear_it_down().当我试图让它处理可能的例外
发生,它变得更加复杂:
FileContextManager类:
def __enter __(自我,文件名,模式):
F =打开(文件名,模式)
返回f
def __ exit __(自我,埃托特,评估,etraceback):
打印" Etype",Etype,"评估",评估," Etraceback",Etraceback
a = f.readlines()
Trackback(最近的最新电话):
文件" ",第1行,在<模块>中
将FileContextManager(" somefile"," r")作为f:
TypeError:此构造函数不采用任何参数
bummer.
另外,我没有阅读过的文档(在effbot上,在PEP 343等)说明了如何
处理__ENTER __ context方法中发生的例外
经理,这正是我想做的.
这只是自然,不是吗?当例如阅读文件,准备
阶段通常是首先检查是否可以打开.所以
它属于上下文管理器的__enter__方法.
"仅限于成功执行A_statement"
a_statement"对我来说似乎有限.
我想能够像
FileContextManager类:
def __enter __(自我,文件名,模式):
F =打开(文件名,模式)
返回f
def __except __(ioError,err):
做这个
打印错误
def __except __(runtimeerror,err):
去做
打印"发生了什么事发生",错误
def __ exit __(自我,埃托特,评估,etraceback):
打印" Etype",Etype,"评估",评估," Etraceback",Etraceback
__EXIT__处理以下" with"块中发生的例外
语句,执行时没有在" a_statement"中提出的例外
用A_Statement作为VAR:
堵塞
以上述方式"使用"会给我带来更多简短的好处,但是
仍然可以理解和高效的代码.
好吧,我可以随时这样做:
尝试:
以打开(" somefile.txt")为txtfile:
对于txtfile中的行:
打印行
除了ioerror:
打印"没有这样的文件".
没有这样的文件.
但这只是丑陋,嵌套得太多(平坦比嵌套更好
对吗?)而不是那么可读.

# 回答1


" Mk" 新闻:Ma *****************************************************************************************此.
a = f.readlines()
Trackback(最近的最新电话):
文件" ",第1行,在<模块>中
使用FileContextManager(" somefile"," r ")为f:
TypeError:此构造函数不采用任何参数
bummer.
另外,我没有阅读过的文档(在effbot上,在PEP 343等中)说了如何
处理__ENTER____________________________________________
这正是我想做的.
这只是自然,不是吗?当例如阅读文件,准备
阶段通常是首先检查是否可以打开.所以
属于上下文管理器的__enter__方法.
"仅限于成功执行A_statement"
a_statement"对我来说似乎有限.
我想能够像
FileContextManager类:
def __enter __(自我,文件名,模式):
F =打开(文件名,模式)
返回f
def __except __(ioError,err):
做这个
打印错误
def __except __(runtimeerror,err):
去做
打印"发生了什么事发生",错误
def __ exit __(自我,埃托特,评估,etraceback):
打印" Etype",Etype,"评估",评估," Etraceback",Etraceback
__EXIT__处理以下" with"块中发生的例外
语句,执行时没有在" a_statement"中提出的例外
用A_Statement作为VAR:
堵塞
以上方式"使用"会给我带来更多简短的好处,但仍然
可以理解和高效的代码.
好吧,我可以随时这样做:
尝试:
以打开(" somefile.txt")为txtfile:
对于txtfile中的行:
打印行
除了ioerror:
打印"没有这样的文件".
没有这样的文件.
但这只是丑陋,嵌套得太多(平坦比嵌套更好
对吗?)而不是那么可读.
我刚刚开始亲自看一下陈述.怎么样:
从__future__ in_statement导入
类exceptionManager(对象):
def __enter __(self):
经过
def __exit __(self,exc_type,exc_value,tb):
如果exc_type == ioError:
打印" ioError",exc_value [1]
返回true#抑制它
与ExceptionManager():
用open('test.txt')作为f:
f.Read()
- -
标记
# 回答2


整洁的.我想我将使用这种方法,因为BDFL主持
在任何可预见的将来,不太可能听我的话. :-)

标签: python

添加新评论