当我尝试print
在Python中使用语句时,它给了我这个错误:
>>> print "Hello, World!"
File "<stdin>", line 1
print "Hello, World!"
^
SyntaxError: Missing parentheses in call to 'print'
Run Code Online (Sandbox Code Playgroud)
那是什么意思?
CPython不使用autodoc作为其文档 - 我们使用手写的散文.
对于PEP 3144(ipaddress模块),我想使用sphinx-apidoc生成初始参考文档.这意味着我想要运行两遍操作:
使用sphinx-apidoc为依赖于autodoc的模块发出Sphinx项目
运行sphinx构建器,创建新的reStructuredText源文件,所有autodoc指令替换为内联reStructuredText内容和生成相同输出的标记
第一步很简单,但我不知道如何进行第二步,甚至无法想出以这些方式搜索任何现有项目的好方法.
有很多方法可以让Docker容器对DNS设置感到困惑(只需搜索SO或更广泛的互联网"Docker DNS"以查看我的意思),建议的常见解决方法之一是:
docker0
网络接口docker0
IP地址进行DNS解析然而,试图在许多现代Linux系统上天真地应用这种解决方法会让你失去一个Linux网络和流程管理复杂性,因为systemd确保你dnsmasq
没有运行,但netstat
告诉你它是,并且实际上尝试启动dnsmasq
失败抱怨53号港口已经投入使用.
那么,即使系统已经有一个默认运行的解析器,你如何可靠地让你的容器访问在主机上运行的本地解析器?
我正在使用Sphinx autodoc扩展来记录模块,我想在文档输出中获得模块成员的平面列表.
我尝试使用以下内容:
.. automodule:: modname
:members:
Run Code Online (Sandbox Code Playgroud)
但是,这有两个问题:
它包括模块的文档字符串,我不希望在这里.
每个条目的名称都以"modname."为前缀,这是完全冗余的(因为此页面专门用于记录此模块)
但是,我还没有找到任何配置选项,让我有选择地禁用这两个方面,同时仍然获得所有模块成员的自动列表.
我目前的计划是只使用autofunction(etc)并明确枚举要记录的成员,但我仍然想知道我是否错过了一种简单的方法来实现我原来想要的.
更新:我至少发现第二部分解决方法:设置add_module_names=False
在conf.py
.这是一个全球性的环境,所以它并没有真正回答我原来的问题.
在最近写一堂课时,我最初提出了一个__repr__
方法,大致如下:
return "{}({!r}, {!r}, {!r})".format(
self.__class__.__name__,
self.arg1,
self.arg2,
self.arg3)
Run Code Online (Sandbox Code Playgroud)
重复那样的'{!r}'代码片段感觉不对,如果我再向这个类添加更多参数,那么维护是很乏味的.然而,对我来说,更强大的替代方案也不会赢得任何优雅的奖品.
以编程方式构建格式字符串:
fmt = "{}(%s)" % ", ".join(["{!r}"]*3)
return fmt.format(self.__class__.__name__,
self.arg1,
self.arg2,
self.arg3)
Run Code Online (Sandbox Code Playgroud)
使用str.join
以下命令单独格式化参数:
args = ", ".join(map(repr, [self.arg1, self.arg2, self.arg3]))
return "{}({})".format(self.__class__.__name__, args)
Run Code Online (Sandbox Code Playgroud)
我目前使用最后一个示例实现了该类,但我对替代方法的建议感兴趣(因为我对上述任何选项都不是特别满意).
更新: 受Ned的回答启发,我现在已将以下实用程序功能添加到帮助程序模块:
def format_iter(iterable, fmt='{!r}', sep=', '):
return sep.join(fmt.format(x) for x in iterable)
>>> format_iter(range(10))
'0, 1, 2, 3, 4, 5, 6, 7, 8, 9'
>>> format_iter(range(10), sep='|')
'0|1|2|3|4|5|6|7|8|9'
>>> format_iter(range(10), fmt='{:04b}', sep='|')
'0000|0001|0010|0011|0100|0101|0110|0111|1000|1001'
>>> format_iter(range(10), fmt='{0.real}+{0.imag}j')
'0+0j, 1+0j, 2+0j, 3+0j, 4+0j, …
Run Code Online (Sandbox Code Playgroud) __slots__
在Python中实现?__slots__
在C中定义Python类时如何获得行为PyTypeObject
?目前,我知道如何!=
在SQL Alchemy中表达NULL安全比较的唯一方法(其中与NULL条目的比较评估为True,而不是NULL)是:
or_(field == None, field != value)
Run Code Online (Sandbox Code Playgroud)
有没有办法在SQL Alchemy中表达这一点,它会发出一个MySQL <=>
操作或PostgreSQL IS DISTINCT FROM
操作,将NULL视为另一个可能的值?
这是一个实用程序中的错误,它从基于XML的查询语言转换为SQL Alchemy过滤器表达式:http://gerrit.beaker-project.org/#/c/2776/
具体的bug出现在一段代码中,如下所示:
query = getattr(field, op)(value)
Run Code Online (Sandbox Code Playgroud)
"field"是相关的SQL Alchemy模型列,"op"是比较操作的相关Python属性名称,"value"是要检查的值.例如,在对具有特定名称的虚拟机管理程序上运行的虚拟机进行过滤的特定情况下,它将等同于:
query = Hypervisor.hypervisor.__eq__("KVM")
Run Code Online (Sandbox Code Playgroud)
该错误不是由于可能存在的值NULL
(不会发生 - 值始终为字符串),而是在与列包含NULL
值且比较运算符为的行进行比较时__ne__
.
对于除了之外的每个运算符__ne__
,标准SQL NULL处理工作正常(比较返回NULL,这被解释为与过滤器不匹配的行,这是我们想要的).但是,对于__ne__
我们确实想要返回该列中包含NULL值的行的情况- 我们只想排除设置值的那些行,并且它与我们要比较的值不匹配.
所以最初的代码如下:
query = getattr(field, op)(value)
Run Code Online (Sandbox Code Playgroud)
现在看起来更像:
if op == "__ne__":
query = or_(field == None, field != value)
else:
query = getattr(field, op)(value) …
Run Code Online (Sandbox Code Playgroud)