我正在尝试以编程方式导入子模块.我的文件树看起来像这样:
oopsd/__init__.py
oopsd/oopsd.py
oopsd/driver/__init__.py
oopsd/driver/optiups.py
Run Code Online (Sandbox Code Playgroud)
optiups.py只打印"Hello World".
oopsd.py看起来像这样:
import importlib
importlib.import_module('oopsd.driver.optiups')
Run Code Online (Sandbox Code Playgroud)
现在有了这个,我得到了这个例外:
Traceback (most recent call last):
File "<frozen importlib._bootstrap>", line 1521, in _find_and_load_unlocked
AttributeError: 'module' object has no attribute '__path__'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "oopsd/oopsd.py", line 29, in <module>
sys.exit(main())
File "oopsd/oopsd.py", line 23, in main
loaddriver()
File "oopsd/oopsd.py", line 26, in loaddriver
importlib.import_module('oopsd.driver.optiups')
File "/usr/lib/python3.3/importlib/__init__.py", line 90, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line …Run Code Online (Sandbox Code Playgroud) 注意:我也在PyQt邮件列表上发布了这个 - 如果有一个好的答案,我会在这里回答我自己的问题.
我在执行时遇到偶然的段错误问题
QApplication.quit(),可能与libQt5Network.so和/或QtWebkit有关.
首先,我正在使用的3个测试系统:
到目前为止,这些崩溃从未发生在Arch上,经常出现在Ubuntu上,而且在Windows中时常发生.(虽然Windows只是一个猜测,我只是得到这个python.exe不再工作 foo.)
我首先注意到一个大(ger)项目qutebrowser中的问题,它在键入时给了我这个堆栈跟踪:quit(在Ubuntu上):
#0 0xb5c296fc in QMutex::lock() () from /usr/lib/i386-linux-gnu/libQt5Core.so.5
#1 0xb3bdd97d in ?? () from /usr/lib/i386-linux-gnu/libQt5Network.so.5
#2 0xb3bdf0d0 in ?? () from /usr/lib/i386-linux-gnu/libQt5Network.so.5
#3 0xb3bd4418 in ?? () from /usr/lib/i386-linux-gnu/libQt5Network.so.5
#4 0xb3bd8b1e in ?? () from /usr/lib/i386-linux-gnu/libQt5Network.so.5
#5 0xb5dedf10 in QMetaObject::activate(QObject*, int, int, void**) ()
from /usr/lib/i386-linux-gnu/libQt5Core.so.5
#6 0xb5dee48b in …Run Code Online (Sandbox Code Playgroud) 我想计算一个圆圈中的所有点.我已经知道我可以计算出使用点x = r * cos(theta) + x0,y = r * sin(theta) + y0-但是我不知道是否有找到一个适当的步长θ表示基于我像素的画布的分辨率(或LCD对我来说)和圆的半径一个很好的方式.
这是我已经拥有的代码(_arange()类似range()但也采用浮动值step):
def circle(x0, y0, r):
step = 2 * math.pi / 1000
for theta in _arange(0, 2 * math.pi, step):
x = x0 + r * math.cos(theta)
y = y0 + r * math.sin(theta)
set(round(x), round(y))
Run Code Online (Sandbox Code Playgroud) 以双下划线开头的标识符在 C 中保留。
那为什么我在像Linux内核这样的语句表达式中的代码中经常看到这样的标识符呢?
举个例子,这是container_of宏:
#define container_of(ptr, type, member) ({ \
const typeof( ((type *)0)->member ) *__mptr = (ptr); \
(type *)( (char *)__mptr - offsetof(type,member) );})
Run Code Online (Sandbox Code Playgroud)
为什么那里的临时值被称为__mptr保留名称?为什么不只是mptr?
部屋,
我正在尝试用doxygen记录我的C代码,但是使用"成员之后的文档"样式似乎对我不起作用.doxygen文档说:
将文档放在成员之后
如果要记录文件,结构,联合,类或枚举的成员,有时需要将文档块放在成员之后而不是之前.为此,您必须在注释块中添加一个<标记.请注意,这也适用于函数的参数.
这里有些例子:
[...]
大多数情况下,人们只想在会员后面做一个简短的描述.这样做如下:
Run Code Online (Sandbox Code Playgroud)int var; //!< Brief description after the member要么
Run Code Online (Sandbox Code Playgroud)int var; ///< Brief description after the member
最佳源代码示例:
/** @file test.c */
void foo(void) {
uint8_t bar; ///< Some random variable
}
Run Code Online (Sandbox Code Playgroud)
我的Doxyfile被粘贴在这里.
我没有在文档中获得变量的描述,而是得到了这个:
2.1.1功能文档
2.1.1.1 void foo(void)
<一些随机变量
有人碰巧知道为什么吗?
c ×2
python ×2
algorithm ×1
angle ×1
doxygen ×1
gcc ×1
geometry ×1
identifier ×1
math ×1
pyqt ×1
python-3.x ×1
qt ×1
qtnetwork ×1
standards ×1
trigonometry ×1