小编nco*_*lan的帖子

在Python中,"SyntaxError:调用'print'时缺少括号"是什么意思?

当我尝试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)

那是什么意思?

python python-3.x

378
推荐指数
7
解决办法
70万
查看次数

从sphinx autodoc发出reStructuredText?

CPython不使用autodoc作为其文档 - 我们使用手写的散文.

对于PEP 3144(ipaddress模块​​),我想使用sphinx-apidoc生成初始参考文档.这意味着我想要运行两遍操作:

  1. 使用sphinx-apidoc为依赖于autodoc的模块发出Sphinx项目

  2. 运行sphinx构建器,创建新的reStructuredText源文件,所有autodoc指令替换为内联reStructuredText内容和生成相同输出的标记

第一步很简单,但我不知道如何进行第二步,甚至无法想出以这些方式搜索任何现有项目的好方法.

python python-sphinx

20
推荐指数
1
解决办法
1451
查看次数

如何让Docker容器访问主机上的dnsmasq本地DNS解析器?

有很多方法可以让Docker容器对DNS设置感到困惑(只需搜索SO或更广泛的互联网"Docker DNS"以查看我的意思),建议的常见解决方法之一是:

  1. 将dnsmasq设置为主机系统上的本地DNS解析程序
  2. 将其绑定到docker0网络接口
  3. 配置Docker以使用docker0IP地址进行DNS解析

然而,试图在许多现代Linux系统上天真地应用这种解决方法会让你失去一个Linux网络和流程管理复杂性,因为systemd确保你dnsmasq没有运行,但netstat告诉你它是,并且实际上尝试启动dnsmasq失败抱怨53号港口已经投入使用.

那么,即使系统已经有一个默认运行的解析器,你如何可靠地让你的容器访问在主机上运行的本地解析器?

dns docker

17
推荐指数
2
解决办法
2万
查看次数

为sphinx自动模块获取"平坦"成员输出

我正在使用Sphinx autodoc扩展来记录模块,我想在文档输出中获得模块成员的平面列表.

我尝试使用以下内容:

.. automodule:: modname
   :members:
Run Code Online (Sandbox Code Playgroud)

但是,这有两个问题:

  1. 它包括模块的文档字符串,我希望在这里.

  2. 每个条目的名称都以"modname."为前缀,这是完全冗余的(因为此页面专门用于记录此模块)

但是,我还没有找到任何配置选项,让我有选择地禁用这两个方面,同时仍然获得所有模块成员的自动列表.

我目前的计划是只使用autofunction(etc)并明确枚举要记录的成员,但我仍然想知道我是否错过了一种简单的方法来实现我原来想要的.

更新:我至少发现第二部分解决方法:设置add_module_names=Falseconf.py.这是一个全球性的环境,所以它并没有真正回答我原来的问题.

python documentation python-sphinx

15
推荐指数
1
解决办法
976
查看次数

包括格式化的iterable作为更大格式化字符串的一部分

在最近写一堂课时,我最初提出了一个__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)

python python-3.x

13
推荐指数
2
解决办法
1351
查看次数

如何在Python中实现__slots__?

python descriptor python-c-api slots python-3.x

12
推荐指数
1
解决办法
1146
查看次数

SQL Alchemy中的NULL安全不等式比较?

目前,我知道如何!=在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)

python sqlalchemy

8
推荐指数
1
解决办法
2057
查看次数