【问题标题】:Python raise NotADirectoryErrorPython 引发 NotADirectoryError
【发布时间】:2015-03-19 00:56:36
【问题描述】:

我试图在目录不存在时引发错误,然后再打开该目录中的文件。根据this response,我应该为我的问题使用最具体的异常构造函数,我认为是NotADirectoryError。但是运行下面的代码我得到NameError: global name 'NotADirectoryError' is not defined。提前感谢您的帮助!

import os
if not os.path.isdir(baselineDir):
  raise NotADirectoryError("No results directory for baseline.")

如果有更好的方法,请提出建议,谢谢。

【问题讨论】:

    标签: python exception os.path


    【解决方案1】:

    您可能使用的是 Python 2,它没有定义 NotADirectoryError。但是,Python 3 中的 is defined 正是您尝试使用它的目的。

    如果您需要使用 Python 2,则需要通过类自己定义错误。通读有关 user-defined exceptions 的文档,了解如何继承 Exception 类并在必要时根据自己的需要对其进行自定义。这是一个非常简单的例子:

    class NotADirectoryError(Exception):
        pass
    

    这将把传递给它的字符串打印出来,就像你想要的那样。

    【讨论】:

      【解决方案2】:

      错误信息非常清楚:NotADirectoryError 尚未定义。如果您想弥补自己的例外情况,@MattDMo 会向您指出如何去做。如果您想使用现有的异常,IOError 似乎最合适。

      【讨论】:

        【解决方案3】:

        如果您知道异常属于哪个模块,请导入该异常:

        from my.exception.module import NotADirectoryError
        

        如果没有,你必须定义这个类:

        class NotADirectoryError(Exception):
            pass
        

        【讨论】:

          【解决方案4】:

          异常通常是类。你必须创建一个 NotADirectoryError 类,它是某个东西的子类,可能是 exceptions.OSError,因为在这种情况下 os 模块会引发这种情况。

          【讨论】:

            猜你喜欢
            • 2018-02-09
            • 1970-01-01
            • 1970-01-01
            • 2020-12-06
            • 2018-09-30
            • 2021-04-09
            • 2010-10-04
            • 2016-09-13
            • 2023-03-24
            相关资源
            最近更新 更多