为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用pass语句?

如何使用pass语句?

撒科打诨 2019-07-25 19:11:42
如何使用pass语句?我正在学习Python,我已经达到了有关该pass声明的部分。我正在使用的指南将其定义Null为通常用作占位符的语句。我仍然不完全明白这意味着什么。有人能告诉我一个简单/基本的情况,其中pass将使用该声明以及为什么需要它?
查看完整描述

3 回答

?
至尊宝的传说

TA贡献1789条经验 获得超10个赞

假设您正在设计一个新类,其中包含一些您不想实现的方法。

class MyClass(object):
    def meth_a(self):
        pass

    def meth_b(self):
        print "I'm meth_b"

如果你遗漏了pass,代码将无法运行。

然后你会得到一个:

IndentationError: expected an indented block

总而言之,该pass声明没有任何特别之处,但它可以充当占位符,如此处所示。


查看完整回答
反对 回复 2019-07-25
?
千巷猫影

TA贡献1829条经验 获得超7个赞

Python有句法的要求,即代码块(后ifexceptdefclass等等)不能为空。然而,空代码块在各种不同的上下文中都是有用的,例如下面的示例,这是我见过的最常见的用例。

因此,如果在代码块中不应该发生任何事情,pass则需要a 来使这样的块不产生IndentationError。或者,可以使用任何语句(包括只需要评估的术语,如Ellipsis文字...或字符串,通常是文档字符串),但是pass清楚地表明确实没有任何事情应该发生,并且不需要实际评估和(至少暂时)存储在内存中。

  • 忽略(全部或)某种类型Exception(例如xml):

    try:
        self.version = "Expat %d.%d.%d" % expat.version_infoexcept AttributeError:
        pass # unknown

    注意:忽略所有类型的加注,如下例所示pandas,通常被认为是不好的做法,因为它还会捕获可能传递给调用者的异常,例如KeyboardInterruptSystemExit(或者甚至HardwareIsOnFireError- 你怎么知道你不是在定义了特定错误的自定义框上运行,某些调用应用程序想知道哪些?)。

    try:
        os.unlink(filename_larry)except:
        pass

    相反,至少使用except Error:或在这种情况下优选地except OSError:被认为是更好的实践。对我安装的所有python模块的快速分析告诉我,超过10%的except ...: pass语句都能捕获所有异常,因此它仍然是python编程中的常见模式。

  • 派生一个不添加新行为的异常类(例如scipy):

    class CompileError(Exception):
        pass

    类似地,用作抽象基类的类通常具有__init__子类应该派生的显式空或其他方法。(例如pebl

    class _BaseSubmittingController(_BaseController):
        def submit(self, tasks): pass
        def retrieve(self, deferred_results): pass
  • 测试代码是否正确运行几个测试值,而不关心结果(来自mpmath):

    for x, error in MDNewton(mp, f, (1,-2), verbose=0,
                             norm=lambda x: norm(x, inf)):
        pass
  • 在类或函数定义中,通常会使用docstring作为要执行的必需语句,作为块中的唯一内容。在这种情况下,pass 除了文档字符串之外,该块还可以包含“这确实是无意义的。”,例如pebl

    class ParsingError(Exception): 
        """Error encountered while parsing an ill-formed datafile."""
        pass
  • 在某些情况下,pass用作占位符来说“这个方法/类/ if-block / ...还没有实现,但这将是它的地方”,尽管我个人更喜欢Ellipsis文字...以便在前面的例子中严格区分这个和故意的“无操作”。例如,如果我用大笔书写一个模型,我可能会写

    def update_agent(agent):
        ...

    别人可能有的地方

    def update_agent(agent):
        pass

    之前

    def time_step(agents):
        for agent in agents:
            update_agent(agent)

    作为update_agent稍后填写函数的提示,但是已经运行了一些测试以查看代码的其余部分是否按预期运行。(这种情况的第三种选择是raise NotImplementedError。这特别适用于两种情况:“这个抽象方法应该由每个子类实现,在这个基类中没有通用的方法来定义它”,或者“这个函数,带有此名称尚未在此版本中实现,但这是它的签名看起来像“


查看完整回答
反对 回复 2019-07-25
  • 3 回答
  • 0 关注
  • 451 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信