- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我喜欢避免“三思而后行”的范式,因为我重视易于阅读的代码。在某些情况下,我无法预测是否会发生错误,例如资源可用性或内存不足错误。我还没有找到一种干净的方法来编写重复或冗长的代码来处理这些情况。
以下示例的可读性差强人意,但重复代码是 Not Acceptable 。
try:
myobject.write(filename)
except OSError:
if prompt("%s is in use by another application." +
"Close that application and try again.") == "Try again":
myobject.write(filename) #repeated code
为了删除重复的代码,我必须再添加几行并缩进所有内容,从而降低可读性。
success = False
while not success:
try:
myobject.write(filename)
success = True
except OSError:
if prompt("%s is in use by another application." +
"Close that application and try again.") != "Try again":
break
有没有更短的 Python 编写方法,不会重复代码?
最佳答案
除了切换到 while True
之外,您还可以添加一个 retry
装饰器,并将可重试的代码移动到由 retry
装饰的函数>:
from functools import wraps
from functools import update_wrapper
def retry(prompt_text="An error occured! Retry (y/n)?",
prompt_match='y',
exception=Exception):
def decorator(func):
@wraps(func)
def wrapper(*args, **kwargs):
while True:
try:
ret = func(*args, **kwargs)
break
except exception:
if raw_input(prompt_text) == prompt_match:
ret = None
break
return ret
return update_wrapper(wrapper, func)
return decorator
@retry(prompt_text="your prompt: ", prompt_match="quit", exception=OSError)
def do_write(myobject, filename):
myobject.write(filename)
if __name__ == "__main__":
myobject = ...
filename = ...
do_write(myobject, filename) # This will be retried.
不过,只有在多个地方使用此模式时,这可能才值得付出努力。
关于python - Python 中的简洁异常处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24728295/
我正在用 C# 编写动态语言的解释器,并将原始函数实现为具有虚拟 Apply 方法的抽象类 Primitive,其中每个实际原始函数都是重写 Apply 的子类。 (另一种方法是只拥有类 Primit
我正在用 C# 编写动态语言的解释器,并将原始函数实现为具有虚拟 Apply 方法的抽象类 Primitive,其中每个实际原始函数都是重写 Apply 的子类。 (另一种方法是只拥有类 Primit
我是 Dapper 的新手我正在尝试了解它实际上是如何映射事物的。我有以下数据库结构: calendar | Id | Name | meeting_room | Id | Calendar_id
抱歉问题标题很糟糕。有没有办法在一行中做到这一点: Button button = (Button)Gridview.Cells[0].FindControl("controlname"); butt
在 Java 中在声明点和使用点声明列表/数组文字的tersest方法是什么? 作为次要问题,我更喜欢一种不会导致编译时警告或要求抑制警告的方法。 注意:就我个人而言,这是针对Java 8ish on
什么是现代、简洁、快速的方法来测试节点是否有任何与给定选择器匹配的子节点? “简洁”是指类似于 jQuery 或函数式风格,例如避免循环。我知道本地选择器越来越多地使用这种类型的东西,但没有跟上发展的
getFirstNotNullResult 执行函数列表,直到其中一个函数返回非空值。 如何更优雅/简洁地实现 getNotNullFirstResult? object A { def main
根据 stackoverflow 上某人的推荐,我使用了 jquery succint https://github.com/micjamking/Succinct截断我在 php 网站上的帖子。 它
我是一名优秀的程序员,十分优秀!