是否有一种python方式将异常抛出给其他开发人员,以警告他们使用带有错误的代码?
例如:
def times_two(x):
raise BrokenException("Attn.This code is unreliable. Only works on positive numbers")
x = abs(x) * 2
return x
我知道我可以在消息中引发泛型异常,甚至可以派生自己的异常类,但是我只想知道是否存在内置的pythonic方法来执行此类操作。
而且,我了解为什么实际的times_two
函数不起作用。那只是一个示例函数。
这不是验证输入参数甚至返回值的东西。
这仅仅是为了将功能标记为潜在不可靠。
在非常特殊的情况下,必须在某些区域使用代码,但是在开发人员编写代码并跨此功能运行时,应警告其局限性。
答案 0 :(得分:0)
对于任何需要警告开发人员的用例,您的示例都存在很大缺陷。这将需要提醒用户不要输入负数。
def times_two(x):
if x < 0:
raise BrokenException("Attn user. Don't give me negitive numbers.")
return x * 2
尽管,我认为,如果您的示例更准确地描述了需要开发人员注意的实际错误,那么您应该仅对此进行修复,而不要在知道存在错误的情况下将其投入生产。
另一方面, sentry.io可以帮助发现错误并帮助开发人员在生产过程中修复错误。如果warnings
不适合您,您可能需要调查一下。来自他们的README.me:
Sentry从根本上说是一项服务,可帮助您监视和修复 实时崩溃。服务器使用Python,但其中包含完整的 用于在任何应用程序中以任何语言发送事件的API。
答案 1 :(得分:0)
应使用构建异常'ValueError'。
def times_two(x):
if x < 0:
raise ValueError('{} is not a positive number.'.format(x))
return x * 2
答案 2 :(得分:0)
这似乎是XY问题。最初的问题是您有一些代码不完整或已知无法正常工作。如果这是您当前正在处理的东西,则此处使用的正确工具是版本控制。使用Git,您将创建一个新分支,该分支仅合并到master
中,并准备在完成工作后发布到生产环境。您不应该发布部分实现。
答案 3 :(得分:0)
是否要在调用函数时停止执行?如果是这样,那么某种异常(例如您示例中的BrokenException
)是实现此目的的好方法。
但是,如果您想警告呼叫者,然后继续进行操作,则需要Warning
而不是异常。您仍然可以创建自己的:
class BrokenCodeWarning(Warning)
pass
raise BrokenCodeWarning
时,默认情况下不会停止执行,但会在stderr上显示警告。
警告过滤器控制警告是被忽略,显示还是变成错误(引发异常)。
https://docs.python.org/3.7/library/warnings.html#the-warnings-filter