在C++中,我有编译器告诉我重构后代码是否有问题.如何确保Python代码在更改后至少是正确的?可能有一些愚蠢的错误,如错误的函数名称等,在编译时很容易找到.
谢谢
我正在尝试对类的成员函数返回的值使用@postcondition装饰器,如下所示:
def out_gt0(retval, inval):
assert retval > 0, "Return value < 0"
class foo(object):
def __init__(self, w, h):
self.width = w
self.height = h
@postcondition(out_gt0)
def bar(self):
return -1
Run Code Online (Sandbox Code Playgroud)
当我尝试调用成员函数'bar'(并因此激发@postcondition提供警告)时,我得到了这个:
>>> f = foo(2,3)
>>> f.bar()
Traceback (most recent call last):
File "<pyshell#22>", line 1, in <module>
f.bar()
File "<pyshell#8>", line 106, in __call__
result = self._func(*args, **kwargs)
TypeError: bar() takes exactly 1 argument (0 given)
>>>
Run Code Online (Sandbox Code Playgroud)
我对@postcondition的定义是http://wiki.python.org/moin/PythonDecoratorLibrary#Pre-.2FPost-Conditions.
我认为错误的产生是因为作为@postcondition基础的函数不期望处理成员函数(当然我见过的所有例子都只是使用普通的旧函数)但是我不知道如何修复它所以我可以这样做吗?
将不胜感激任何建议.
由于Matlab被解释,通常会在执行函数签名的函数开头花费大量时间.例如
if nargin ~= 2; error('must provide two input args a and b'); end
if a < 0||a ~=floor(a); error('input arg1 must be positive non-zero integer'); end
if ~isa(b,'cell') ...
Run Code Online (Sandbox Code Playgroud)
相反,使用Matlab的assert()会更好吗?如果没有,何时适合在Matlab中使用assert()?
有对在生产中使用代码断言的大讨论在这里,但我不能肯定这适用于解释的代码.同样,这里有另一个很好的讨论,我同意@Dan Dyer关于断言表达对当前状态的看法.然而,在这里看一下类似的Python讨论人们说,只使用断言来应对永远不会发生的情况(例如异常情况的异常),这与之前的引用有点矛盾.
也许这更像是一个关于断言在解释语言中扮演的角色的问题,而不是关于Matlab的问题.
通过优化模式,我的意思是没有断言,可能没有文档字符串,.pyo而不是.pyc.
简而言之,我有一个 django 项目,以标准样式 ( ) 通过 Gunicorn(v18.0)gunicorn 'module.wsgi:application'运行
我无法在文档或在线其他地方找到参考。
我正在尝试从 Windows 剪贴板中获取一个字符串并将其粘贴到 Tkinter GUI 中的列表框中。在尝试复制图像之前它效果很好。
clipboardData = root.selection_get(selection="CLIPBOARD")
listbox.insert(0, clipboardData)
Run Code Online (Sandbox Code Playgroud)
我尝试过使用 Tkinter、pyperclip 和剪贴板。如何避免非文本内容?
我正在编写一个类,它__init__使用id或slug参数,但不能同时使用.我想验证参数是否符合预期.使用一个assert用于验证关于参数的假设的特定目的是否合适和良好实践,或者如果参数不符合预期,我是否应该提出异常?
例如,
def __init__(self, id=None, slug=None):
assert((id or slug) and not (id and slug))
Run Code Online (Sandbox Code Playgroud) 所以例如我有:
a = np.array(...)
a[idx / 3] = 5
Run Code Online (Sandbox Code Playgroud)
idx / 3将是 a float,即使它在该程序中始终具有整数值。这将引发VisibleDeprecationWarning或 较新的 Python 版本已不再支持。
是否有内置函数可以将浮点数转换为整数,并且如果输入值不是整数,则可以引发异常?或者正确的方法是什么?
我知道这也可能会导致一些关于整数“有多接近”的问题,这就是为什么我问而不只是相信floor/ ceil。