如何让静态代码分析知道异常抛出函数?
How to make static code analysis aware of an Exception throwing function?
出于可读性和可重用性的原因,我有一个 总是 调用时引发特定异常的函数。但是,静态代码分析似乎没有考虑到这一点,即我收到了不必要的警告。有没有什么好的方法可以避免这些警告,例如,通过让静态代码分析意识到这个函数总是会引发异常这一事实?
最小工作示例:
def raise_an_exception():
raise Exception("...description...")
def foo(arg):
if arg:
x = 1
else:
raise_an_exception()
# causes warning "Local variable 'x' might be referenced before assignment":
return x + 1
def bar(arg):
if arg:
x = 1
else:
raise Exception("...description...")
# causes no warning:
return x + 1
边界条件:我不想在if
语句之前在foo()
中声明x
或设置x
else
代码块中的任何值,或任何其他类似的解决方法。在 bar()
中没有必要,在 foo()
中也没有必要。
对于不能正常 return 的函数有一个 NoReturn
注释:
from typing import NoReturn
def raise_an_exception() -> NoReturn:
raise Exception("...description...")
理解类型注释的静态分析工具应该理解这一点并且不会报告 foo
的错误。
出于可读性和可重用性的原因,我有一个 总是 调用时引发特定异常的函数。但是,静态代码分析似乎没有考虑到这一点,即我收到了不必要的警告。有没有什么好的方法可以避免这些警告,例如,通过让静态代码分析意识到这个函数总是会引发异常这一事实?
最小工作示例:
def raise_an_exception():
raise Exception("...description...")
def foo(arg):
if arg:
x = 1
else:
raise_an_exception()
# causes warning "Local variable 'x' might be referenced before assignment":
return x + 1
def bar(arg):
if arg:
x = 1
else:
raise Exception("...description...")
# causes no warning:
return x + 1
边界条件:我不想在if
语句之前在foo()
中声明x
或设置x
else
代码块中的任何值,或任何其他类似的解决方法。在 bar()
中没有必要,在 foo()
中也没有必要。
对于不能正常 return 的函数有一个 NoReturn
注释:
from typing import NoReturn
def raise_an_exception() -> NoReturn:
raise Exception("...description...")
理解类型注释的静态分析工具应该理解这一点并且不会报告 foo
的错误。