我有一堆用于编码原始电子邮件的旧代码,其中包含许多打印语句,例如
print >>f, "Content-Type: text/plain"
对于电子邮件来说,这一切都很好,但是现在我们利用相同的代码来输出HTTP请求。问题是Python打印语句'\n'
在HTTP需要时输出'\r\n'
。
看起来Python(至少是2.6.4)PRINT_NEWLINE
为print语句生成了尾部字节码,该语句被实现为
ceval.c:1582: err = PyFile_WriteString("\n", w);
因此,似乎没有简单的方法可以覆盖默认的换行行为。我考虑了以下解决方案
.replace('\n', '\r\n')
。这将干扰使用多部分编码的HTTP消息。在目标文件对象周围创建包装器并代理该.write
方法
def write(self, data):
if data == ‘\n’:
data = ‘\r\n’
return self._file.write(data)
写的正则表达式转换print >>f, text
到f.write(text + line_end)
哪里line_end
可以'\n'
或'\r\n'
。
我相信第三种选择是最合适的。听到您的Pythonic解决问题的方法会很有趣。
您现在应该通过定义新的输出函数来永远解决问题。如果打印了一个功能,这会容易得多。
我建议编写一个新的输出函数,尽可能地模仿现代打印函数的签名(因为重用一个好的接口是好的),例如:
def output(*items, end="\n", file=sys.stdout):
pass
更换所有有问题的打印后,您将不再有此问题-您可以随时更改函数的行为!这是为什么在Python 3中将print设置为函数的一个重要原因-因为在Python
2.x中,“所有”项目总是经过所有print
语句不再灵活且没有简单出路的阶段。
我正在使用supportlib v4来实现主细节流。 方法在单击后调用:
语句覆盖是广泛使用的软件测试之一。它来自白盒测试。 语句覆盖技术用于设计白盒测试用例。该技术涉及至少执行一次源代码的所有语句。它用于计算源代码中源代码中执行的语句总数。 语句覆盖在白盒测试过程中得出测试用例的场景,该过程基于代码的结构。 在白盒测试中,测试人员的专注点是内部源代码和流程图或代码流程图的工作。 通常,在内部源代码中,有各种各样的元素,如运算符,方法,数组,循环,控制语句,异常处理程序
问题内容: 上下文:我正在将Python与行为(BDD)结合使用。 无论是从命令行(行为)还是从自定义main()运行测试,其行为都是相同的:测试运行,并且在控制台中看到的唯一输出是标准BDD报告。 我的测试包括print()语句,可帮助我调试代码。但是,当我运行行为时,这些打印语句均未显示在控制台输出中。 有什么方法可以 让我们的代码在代码中“表现”出来? 我的主要() 我的test.featu
问题内容: 我在Employee类中有以下定义 现在,我想使用现有员工ID导入现有员工。即使在保存之前设置了员工ID,也会忽略分配的ID,并存储自动递增的ID。我们如何覆盖呢? 问题答案: 我编写了自己的生成器来解决此问题。 并像这样使用它:(替换包名)
问题内容: 我想知道是否有一种方法可以打印没有换行符的元素,例如 并且将打印而不是通常打印的内容 谢谢! 问题答案: 这可以用轻松完成打印() 函数 与 Python 3中 。 会给你 在 Python v2中, 您可以通过以下方式使用该函数: 作为源文件中的 第一条 语句。 如print()文档所述: 请注意,这类似于我最近回答的问题(https://stackoverflow.com/a/12
问题内容: python中有没有办法将try / except变成一行? 就像是… 哪里是声明的变量,而不是…所以会引发错误并变成… 问题答案: 在Python中无法将/块压缩到一行上。 另外,不知道变量是否像在其他动态语言中一样,在Python中是否存在也是一件坏事。比较安全的方法(和流行的样式)是将所有变量设置为某种值。如果他们可能就不会置,将其设置为第一(或或或如果它是更适用的东西。) 如果
我在最后一行中找不到错误。我是这门语言的初学者。提前谢谢。 我的输出说最后一行。
问题内容: 在python中创建多行的干净方法是什么?我想在一个内打开多个文件,但它足够靠右,足以在多行上显示。像这样: 不幸的是,这是一个。所以我尝试了这个: 也是语法错误。但是,这可行: 但是,如果我想发表评论怎么办?这不起作用: s的位置也没有任何明显的变化。 有没有一种干净的方法来创建允许多行注释的多行语句? 问题答案: 这在Python 3.9中已修复! https://github.c