所有内置异常似乎都接受任意数量的具有任何类型的值的参数,没有关键字参数,并且没有隐式设置任何属性。甚至FileNotFoundError().errno
的评估结果为None
,而strerror
属性也不是吸气剂,这使我得出结论,创建符合标准的OSError
的唯一方法是构建它“从头开始”,就像这样:
new_error = FileNotFoundError()
new_error.errno = 2 # Be careful to match chosen subclass
new_error.strerror = os.strerror(2) # Even this could be anything else
new_error.filename = "somefile.txt"
raise new_error
这当然可以,但是非常是非Python的,容易出错。我错过了什么吗?
关于意图的注释:我知道我不应该从自定义代码引发OSError。我只是设计一个尽可能类似于OSError及其子类的接口的类链,所以我想知道它是如何工作的。