【发布时间】:2016-11-28 02:57:45
【问题描述】:
问题
我们遇到了一个奇怪的错误**,我们怀疑这是因为我们的 script.py*** 分配了一个已经具有某些内置含义的变量。例如。
str = 2
有没有办法检查这是否发生了?
到目前为止
我们认为这将涉及:
-
在脚本开头指定一个列表,其中包含所有内置对象的名称作为字符串:
builtin_names = get_builtin_var_names() # hypothetical function -
在脚本末尾指定一个列表,其中包含所有用户分配对象的名称作为字符串:
user_names = get_user_var_names() # hypothetical function -
找到交叉点,检查是否不为空:
overwritten_names = list(set(user_names) & set(builtin_names)) if overwritten_names: print("Whoops")
相关
- Is there a way to tell if a function in JavaScript is getting over written?
- Is there a common way to check in Python if an object is any function type?
**静默错误,对于那些对它感兴趣的人来说,它是静默的,即它在没有错误代码的情况下完成,但它吐出的值在两种实现之间有所不同相同的代码,称它们为 A 和 B...这两个版本都需要运行我们创建的两个模块(单独的文件)(changes.py 和 dnds.py),但是:
- A 版:涉及运行 changes.py -> pickle 中间数据(到 .p 文件中)-> dnds.py,
- 版本 B:涉及运行 changes.py -> 将数据(字典)作为 dnds.py 的参数返回 -> dnds.py。
由于某种原因,只有版本 A 是具有正确最终值的版本(以 MATLAB's dnds function 为基准)。
***script.py,其实是dnds.py(谁导入了changes.py)。你可以找到all the code,但要测试我在 ** 中讨论的两个替代版本,你需要专门查看dnds.py,即:CTRL+F:"#@TODO:Urgent:debug:2016-11-28:"。找到该行后,您可以阅读该注释行的其余部分,了解如何复制版本 B 及其导致的静默错误**。出于某种原因,我必须对数据进行腌制才能使其正常工作......当我直接返回 dicts 时,我得到了错误的 dN/dS 值。
【问题讨论】:
-
奇怪的错误是什么样的?
-
你的例子不是很好,因为
function不是 Python 中的内置名称。 -
尝试使用常规 Python 而不是 IPython;看起来 IPython 对
__builtins__做了一些不寻常的事情,将其别名为模块名称__builtin__。 -
尝试使用 linter 来捕捉这个
-
@hello_there_andy 您可能需要开启特定检查。
标签: python python-2.7 variables variable-assignment built-in