GVKun编程网logo

在 Python 中使用 try-except-else 是一个好习惯吗?(python中try...except的作用)

9

在本文中,我们将为您详细介绍在Python中使用try-except-else是一个好习惯吗?的相关知识,并且为您解答关于python中try...except的作用的疑问,此外,我们还会提供一些关于

在本文中,我们将为您详细介绍在 Python 中使用 try-except-else 是一个好习惯吗?的相关知识,并且为您解答关于python中try...except的作用的疑问,此外,我们还会提供一些关于Android:静态获取Context是一个好习惯吗?、css – 使用float来定位元素是一个好习惯吗?、html – 使用页面内容的最小和最大高度宽度是一个好习惯吗?、java – 使用包私有方法以便于单元测试是一个好习惯吗?的有用信息。

本文目录一览:

在 Python 中使用 try-except-else 是一个好习惯吗?(python中try...except的作用)

在 Python 中使用 try-except-else 是一个好习惯吗?(python中try...except的作用)

在 Python 中,我不时会看到以下内容:

try:   try_this(whatever)except SomeException as exception:   #Handle exceptionelse:   return something

try-except-else 存在的原因是什么?

我不喜欢那种编程,因为它使用异常来执行流控制。但是,如果它包含在语言中,那肯定是有充分理由的,不是吗?

我的理解是异常不是错误 ,它们应该只用于异常情况(例如我尝试将文件写入磁盘并且没有更多空间,或者我没有权限),而不是用于流控制。

通常我将异常处理为:

something = some_default_valuetry:    something = try_this(whatever)except SomeException as exception:    #Handle exceptionfinally:    return something

或者如果发生异常我真的不想返回任何东西,那么:

try:    something = try_this(whatever)    return somethingexcept SomeException as exception:    #Handle exception

答案1

小编典典

“我不知道是不是因为无知,但我不喜欢那种编程,因为它使用异常来进行流控制。”

在 Python 世界中,使用异常进行流控制是常见且正常的。

甚至 Python 核心开发人员也使用异常来进行流控制,并且这种风格在语言中很重要(即迭代器协议使用
StopIteration
来表示循环终止)。

此外,try-except 样式用于防止某些“look-before-you-
leap”结构中固有的竞争条件。例如,测试
os.path.exists
会导致信息在您使用时可能已经过时。同样,
Queue.full
返回可能是陈旧的信息。在这些情况下,try-except-else
样式将生成更可靠的代码。

“我的理解是异常不是错误,它们应该只用于异常情况”

在其他一些语言中,该规则反映了他们的文化规范,正如他们的图书馆所反映的那样。“规则”也部分基于这些语言的性能考虑。

Python 文化规范有些不同。在许多情况下,您 必须 对控制流使用异常。此外,在 Python
中使用异常不会像在某些编译语言中那样减慢周围代码和调用代码的速度(即CPython已经在每一步都实现了用于异常检查的代码,无论您是否实际使用异常)。

换句话说,您对“例外是为例外”的理解是在其他一些语言中有意义的规则,但对于 Python 则不然。

“但是,如果它包含在语言本身中,那肯定是有充分理由的,不是吗?”

除了有助于避免竞争条件外,异常对于将错误处理拉到循环外也非常有用。这是解释语言中的必要优化,这些语言不倾向于具有自动循环不变的代码运动。

此外,在处理问题的能力与问题出现的地方相去甚远的常见情况下,异常可以大大简化代码。例如,通常有顶级用户界面代码调用业务逻辑代码,而这些代码又调用低级例程。低级例程中出现的情况(例如数据库访问中唯一键的重复记录)只能在顶级代码中处理(例如要求用户提供与现有键不冲突的新键)。对这种控制流使用异常允许中级例程完全忽略该问题,并与流控制的这方面很好地分离。

这里有一篇很好的关于异常的必要性的博客文章。

另外,请参阅 StackOverflow
答案:异常真的是异常错误吗?

“try-except-else 存在的原因是什么?”

else 子句本身很有趣。它在没有例外但在 finally 子句之前运行。这是它的主要目的。

如果没有 else 子句,在最终确定之前运行附加代码的唯一选择就是将代码添加到 try 子句的笨拙做法。这很笨拙,因为它有可能在代码中引发不打算由 try
块保护的异常。

在最终确定之前运行额外的未受保护代码的用例并不经常出现。因此,不要期望在已发布的代码中看到很多示例。这有点罕见。

else 子句的另一个用例是执行在未发生异常时必须发生的操作,而在处理异常时不会发生的操作。例如:

recip = float(''Inf'')try:    recip = 1 / f(x)except ZeroDivisionError:    logging.info(''Infinite result'')else:    logging.info(''Finite result'')

另一个例子发生在单元测试运行器中:

try:    tests_run += 1    run_testcase(case)except Exception:    tests_failed += 1    logging.exception(''Failing test case: %r'', case)    print(''F'', end='''')else:    logging.info(''Successful test case: %r'', case)    print(''.'', end='''')

最后,在 try 块中最常见的 else 子句用于美化(将异常结果和非异常结果对齐在同一缩进级别)。这种使用始终是可选的,并不是绝对必要的。

Android:静态获取Context是一个好习惯吗?

Android:静态获取Context是一个好习惯吗?

参见英文答案 > Is it safe to save the app context to a static variable in Android?                                    5个
目前,在我的应用程序中,我有以下课程:

public class MyApp extends Application {

    private static Context context;

    public void onCreate(){
        super.onCreate();
        MyApp.context = getApplicationContext();
    }

    public static Context getContext() {
        return MyApp.context;
    }
}

我使用它来在既不是活动也不是片段的类中使用Context.使用存储在此类上的上下文与使用和活动作为上下文之间有什么区别?有这个课程是一个好习惯,还是应该为任何需要它的班级提供一个活动作为背景?

谢谢.

解决方法:

It’s there any difference between use the context stored on this class and use and activity as context?

是.请阅读有关该主题的Dave Smith’s epic blog post.总结:当你知道为什么Application是正确的答案时,只使用一个应用程序……而且它很少.

It is a good practice to have this class

恕我直言,通常不是.有时您可能需要一个Application对象,但是您不需要自己的自定义子类,也不需要将它设为单例.

should I provide an activity as context to any class who needs it?

您可以为需要它的任何方法提供正确的Context实例.正如Dave Smith在该博客文章中描述的那样,并非所有Context实例都是平等的.仅当Application是正确的Context时才使用Application.

css – 使用float来定位元素是一个好习惯吗?

css – 使用float来定位元素是一个好习惯吗?

我可以使用float将元素放在网页中而不是使用position:absolute或relative吗?

解决方法

从根本上?当然,这就是它的用途.

它是否是正确的选择取决于你想要做什么.

您只需要处理后果 – 例如,在使用多个后续浮动元素时需要使用clear属性以避免不良后果.

html – 使用页面内容的最小和最大高度宽度是一个好习惯吗?

html – 使用页面内容的最小和最大高度宽度是一个好习惯吗?

我发现使用min-width,max-width,min-height,max-height和vw,vh测量我可以控制每个分辨率上元素的大小.

例如:

*{
    margin: 0;
    padding: 0;
    Box-sizing: border-Box;
}
html,body{
    height: 100%;
    min-height: 100%;
}
body{
    font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
    font-size: 13px;
    line-height: 18px;
    color: #333;
    background-color: #f4f6f7;
}
#container{
    background-color: #fff;
    -moz-border-radius: 0.4vw;
    -webkit-border-radius: 0.4vw;
    border-radius: 0.4vw;
    border: 0.1vw solid rgba(0,0.15);
    -moz-Box-shadow: 0.3vw 0.3vw 0.3vw rgba(0,0.05);
    -webkit-Box-shadow: 0.3vw 0.3vw 0.3vw rgba(0,0.05);
    Box-shadow: 0.3vw 0.3vw 0.3vw rgba(0,0.05);
    width: 70vw;
    min-width: 70vw;
    max-width: 70vw;
    min-height: 100vh;
    margin-left: auto;
    margin-right: auto;
}

这个容器将是100%的视口高度,无论用户分辨率有多大或多小.它的大小是静态的.如果我对容器内容做同样的事情就会发生这种情况.这不是一种响应?如果它在每个分辨率上看起来都一样,那么它应该是,我已经测试了它并且它可以工作.但这看起来太简单了,它必须是错误的,或者不是.

如果以这种方式工作是个好主意我需要一些意见,如果不是,为什么呢?

解决方法

完全取决于你想要做的事情.仅当您想要在不使用jQuery的情况下创建相对于屏幕大小的块时,vh和vw度量才有用.

最小和最大宽度选项主要用于动态块.例如,为了防止空块崩溃,或者将具有大量内容的块拉伸到超出预期大小的设计元素.

java – 使用包私有方法以便于单元测试是一个好习惯吗?

java – 使用包私有方法以便于单元测试是一个好习惯吗?

有时我发现自己处于这样的情况,如果我将某些方法的可见性从私有更改为私有,以便更容易进行单元测试模拟,断言……

一个例子就是这样

假设我有一个包含4个属性X,Y,Z和R的对象A,其中X,Y和Z是集合,R是每个集合的不同元素之间的关系,例如,关系将由X的元素组成,Y的元素和Z的元素.对象A不允许直接访问X,Z或R,而是提供了一个丰富的API,允许您在X,Y和Z上创建新元素,也允许您将这些元素混合到新的R元素中.对于单元测试,使用公共getX(),public getY(),public getZ()和public getR()方法非常方便,因此每次调用时我都可以对对象的内部做出确切的断言对象API.但是,暴露X,Y和Z是我想要防止的,这就是为什么从非常开始的对象使这些元素变得私有,并且只使用它的API提供对它们的间接访问.然而,提供包私有方法getX(),getY(),getZ()和getR()是否有意义,以便至少形成单元测试我可以轻松检查对象的内部状态是否是预期的?

缺点当然是方法的可见性增加,并且鉴于这种方法是私有的,有充分的理由,感觉有点奇怪.

当然我可以使用反射来达到同样的效果,但感觉更脏.

所以问题是,这是一种好的还是坏的做法?这是代码味道吗?它会发生在别人身上吗?有更好的技术吗?

解决方法

通常,良好的做法是不暴露内部逻辑.相反,你必须使你的类可配置.例如,如果您的类需要其他组件,例如让我们说HttpComponent等,请尝试使用不同的依赖注入技术来提供这些依赖项.然后在测试中,您可以模拟这些依赖项并验证这些模拟.

在您的情况下,它取决于上下文.大多数情况下,您将私有函数作为测试公共函数的一部分进行测试.因此,您测试不同情况下的公共行为,如果全部通过它意味着通过该公共函数调用的私有函数也可以工作.

关于在 Python 中使用 try-except-else 是一个好习惯吗?python中try...except的作用的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于Android:静态获取Context是一个好习惯吗?、css – 使用float来定位元素是一个好习惯吗?、html – 使用页面内容的最小和最大高度宽度是一个好习惯吗?、java – 使用包私有方法以便于单元测试是一个好习惯吗?的相关信息,请在本站寻找。

本文标签: