【问题标题】: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 模块会引发这种情况。