我在flake8上设置了一个严格的预提交钩子(Hook),所以直到它高兴时我才能提交。这通常是一件好事,但是却引起了一些问题,而这些问题似乎根本没有问题。
我无法让Flake8识别FileNotFoundError
。
example.py
try:
pass
except FileNotFoundError:
pass
这足够使Flake8生成错误的代码
$ flake8 example.py
example.py:3:8: F821 undefined name 'FileNotFoundError'
$ python example.py # no error
$ python3 example.py # no error
我检查了python docs,FileNotFoundError是一个“内置”异常,因此我认为我不必从任何地方导入它,我的python解释器也没有提示过,就像flake8一样。
最佳答案
运行python 2.7.8
我得到了关注:
except FileNotFoundError:
NameError: name 'FileNotFoundError' is not defined
如果我更改为
OSError
,则可以在python 3
上正常工作except OSError:
FileNotFoundError是
OSError
中python3
的子类使用
OSError
不仅会捕获python 3中的FileNotFound
错误,因此您可能需要添加其他检查。对于
python 2
,它是IOError
:您可以捕获特定的错误:
import __builtin__
exc = getattr(__builtin__,"IOError","FileNotFoundError")
try:
(open("bad_file"))
except exc:
pass
当然有更好的方法,但对于python 3:
try:
f = (open("bad_file"))
except OSError as e:
if isinstance(e, FileNotFoundError):
pass
else:
raise e
关于python - Flake8无法识别内置异常,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25308968/