“ E271:不比较类型,请使用isinstance()”错误

时间:2018-09-18 21:49:52

标签: python pep8

python PEP 8 linter不喜欢这样:

assert type(a) == type(b)

它告诉我使用“ isinstance()”代替。但是要使用isinstance,我必须做类似的事情

assert isinstance(a, type(b)) and isinstance(b, type(a))

这似乎更令人不安,我真的不明白这一点。

以某种我看不见的方式明智地支了棉绒吗?还是我以某种方式看不到棉绒呢?

1 个答案:

答案 0 :(得分:1)

从注释中添加的上下文:

  

根据我的程序的逻辑,此时代码中应该有public static class HttpContentExtensions { public static Task ReadAsFileAsync(this HttpContent content, string filename, bool overwrite) { string pathname = Path.GetFullPath(filename); if (!overwrite && File.Exists(filename)) { throw new InvalidOperationException(string.Format("File {0} already exists.", pathname)); } FileStream fileStream = null; try { fileStream = new FileStream(pathname, FileMode.Create, FileAccess.Write, FileShare.None); return content.CopyToAsync(fileStream).ContinueWith( (copyTask) => { fileStream.Close(); }); } catch { if (fileStream != null) { fileStream.Close(); } throw; } } } ,而我只是想断言要确保一切运行顺利

在这种情况下,您应该只忽略棉短绒,因为它没有建议任何对您有用的东西。 E271旨在通过类型检查来警告人们有关问题的信息,例如:

type(a) == type(b)

上面的示例可能忽略了if type(a) == A: ... a子类的实例的可能性,从而无意中破坏了逻辑流程。