所有 pytest 文档都指定这py.test file_name是运行 pytest 测试用例的标准方法。但我在 Emacs 中进行开发,Python 脚本位于左窗格中,Python 解释器位于右窗格中。
我的工作流程是对 Python 脚本进行更改CTRL-C C(以便将更新的更改发送到 REPL)并移动到 REPL ( CTRL-O),以便测试更新的代码。如果我可以更改左侧的测试用例,移动到右侧的 REPL 屏幕并执行更新的测试用例,那就太好了。
有没有办法从 REPL 或在脚本中运行 pytest 测试用例,而不是生成 shell 并运行 pytest 命令?
编辑:顺便说一句,我确实尝试使用mainpytest 中的函数并在脚本中调用它,但由于一些有趣的原因,除非我杀死旧的 REPL 并启动一个新的,否则不会拾取更改。其他 Python 脚本不会发生这种情况,所以我确信这与 pytest 有关。这是代码:
def test_add():
assert myadd(1, 2) == 3
if __name__ == '__main__':
pytest.main()
Run Code Online (Sandbox Code Playgroud) 我相信这将是一个简单的问题,但我不能为我的生活决定必须做些什么.所以这就是它:假设我们遵循BigDecimal用于财务计算的"最佳实践" ,如何处理抛出异常的东西(计算)?
例如:假设,我必须拆分"用户数量"以投资"n"个不同实体之间的债券.现在考虑用户提交100美元进行投资以分配3个债券的情况.等效代码如下所示:
public static void main(String[] args) throws Exception {
BigDecimal bd1 = new BigDecimal("100.0");
BigDecimal bd2 = new BigDecimal("3");
System.out.println(bd1.divide(bd2));
}
Run Code Online (Sandbox Code Playgroud)
但是众所周知,这个特定的代码片段会抛出,ArithmeticException因为除法是非终止的.在计算过程中使用无限精度数据类型时,如何在代码中处理这种情况?
TIA,
佐助
更新:鉴于这RoundingMode有助于解决这个问题,下一个问题是,为什么100.0/3不是33.33而不是33.3?难道33.33不是一个"更准确"的答案,因为你期望33美分而不是30美分吗?有什么方法可以调整吗?
我最近开始学习Python(这里是长期的Java程序员),目前正在编写一些简单的服务器程序。问题是,对于看似相似的一段代码,Java对应部分正确响应SIGINT信号(Ctrl+ C),而Python则没有响应。当使用单独的线程生成服务器时,可以看到这一点。代码如下:
// Java code
package pkg;
import java.io.*;
import java.net.*;
public class ServerTest {
public static void main(final String[] args) throws Exception {
final Thread t = new Server();
t.start();
}
}
class Server extends Thread {
@Override
public void run() {
try {
final ServerSocket sock = new ServerSocket(12345);
while(true) {
final Socket clientSock = sock.accept();
clientSock.close();
}
} catch(Exception e) {
e.printStackTrace();
}
}
}
Run Code Online (Sandbox Code Playgroud)
和Python代码:
# Python code
import threading, sys, …Run Code Online (Sandbox Code Playgroud) 我是一名Java程序员,他一直在努力学习一些C++,以扩展我的知识.这是一个小代码片段,我认为由于隐式转换而起作用,但我想知道它引用的规范的哪一部分以及在隐式转换时我必须注意的其他规则是什么.是否有文档/链接/网站,其中列出了隐含的转换规则?
#include <vector>
#include <iostream>
#include <iterator>
int main(void) {
using namespace std;
vector<bool> a;
a.push_back("asdf");
a.push_back("");
a.push_back(12);
a.push_back(0.0);
copy(a.begin(), a.end(), ostream_iterator<bool>(cout, "\n"));
return 0;
}
/*
output:
1
1
1
0
*/
Run Code Online (Sandbox Code Playgroud)
TIA,
佐助
我最近开始使用Python解析二进制数据的活动,但我对Python处理"字节"项的方式感到困惑.请参考以下口译员对话:
>>> f = open('somefile.gz', 'rb')
>>> f
<open file 'textfile.gz', mode 'rb' at 0xb77f4d88>
>>> bytes = f.read()
>>> bytes[0]
'\x1f'
>>> len(bytes[0])
1
>>> int(bytes[0]) <---- calling __str__ automatically on bytes[0] ?
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '\x1f'
Run Code Online (Sandbox Code Playgroud)
上面的会话显示bytes [0]的大小为1个字节,但__str__表示是十六进制的.不用担心,但是当我尝试将字节[0]视为单个字节时,我会得到时髦的行为.
如果我想基于某些规范解析/解释二进制流,其中规范包括十六进制,二进制和十进制的表示,我将如何去做.
例如,"前两个字节是\xbeef,下一个是十进制8后跟一个打包位字段,其中字节的8位中的每一位代表一些标志?我猜有几个模块可以使这个任务变得容易但是我我想从头开始做.
我看过struct模块的引用,但没有引入新模块就没有办法直接检查读取的字节数?有点像bytes[0] == 0xbeef?
有人可以帮我解决一下人们通常使用Python解析符合规范的二进制数据吗?谢谢.
python ×3
java ×2
bigdecimal ×1
binary-data ×1
boolean ×1
c++ ×1
emacs ×1
pytest ×1
sockets ×1