我正在使用带有数百个测试用例的套接字的模块.这很好.除了现在我需要使用和不使用socket.setdefaulttimeout(60)测试所有情况...请不要告诉我剪切和粘贴所有测试并在setup/teardown中设置/删除默认超时.
老实说,我认为每个测试用例都是好的做法,但我也不喜欢重复自己.这实际上只是在不同的测试环境中进行测试.
我看到unittest支持模块级别设置/拆卸夹具,但对我来说,如何将我的一个测试模块转换为两次不同的设置两次测试本身并不明显.
任何帮助将非常感激.
可能重复:
不要在异常堆栈中显示Python提升行
内置在诸如此类的异常中,NameError可以回溯我的代码中发生异常的点.我正在研究一个实用程序模块,它让我觉得如果使用我的模块的代码引发异常,那么异常之前的回溯中的最后一件事就是我的raise WhateverError.
有没有办法在python中引发异常并让tracback在内置异常中停止一帧(不编写c代码)?
日期时间模块可以进行日期验证和数学处理,这在您关心现实时很好.
我需要一个包含生成日期的对象,即使它们无效也是如此.日期时间过于严格,有时候我只知道一年或一年和一个月,有时我有一个像2011-02-30这样的日期.
是否有一个模块,就像datetime但可以处理无效日期?
如果没有,那么在尽可能少复制功能的同时处理这个问题的最佳方法是什么,并且在可以执行时仍然允许日期数学?
UPDATE
这样做的动机是与多个系统集成,这些系统使用日期并且不关心无效日期(mysql和perl),除了希望能够告诉基本的一般时间范围.对于模糊日期数学,从已知时间单位的开始开始(如果我知道年份和月份而不是日期,请使用第一个,如果我知道年份但没有月份或日期,请先使用1月份).最后一点不是必要的,但是很好,我明白为什么它不常见,因为需要特殊情况日期数学的人可能会自己构建它.
我遇到的一个主要问题是使用sqlalchemy和mysqldb将日期从mysql加载到python中 - 如果你从mysql中的日期列im mysql加载一个看起来像'2011-01-00'的值,你在python中得到None.任何伸展都不是很酷.
当使用multiprocessingManager 对象创建服务器并远程连接到该服务器时,客户端需要保持与远程服务器的连接。如果服务器在客户端关闭之前离开,客户端将永远尝试连接到服务器的预期地址。
我在服务器消失后试图退出的客户端代码陷入僵局,因为我的客户端进程永远不会退出。
如果我del在服务器宕机之前我的远程对象和我的客户管理器,进程将正常退出,但是在使用后立即删除我的客户的管理器对象和远程对象不太理想。
这是我能做的最好的吗?是否有另一种(更合适的)方法可以断开与远程管理器对象的连接?在服务器关闭和/或连接丢失后,有没有办法干净地退出客户端?
我知道 socket.setdefaulttimeout 不适用于多处理,但是有没有办法专门为多处理模块设置连接超时?这是我遇到问题的代码:
from multiprocessing.managers import BaseManager
m = BaseManager(address=('my.remote.server.dns', 50000), authkey='mykey')
# this next line hangs forever if my server is not running or gets disconnected
m.connect()
Run Code Online (Sandbox Code Playgroud)
更新这在多处理中被破坏了。连接超时需要发生在套接字级别(为了做到这一点,套接字需要是非阻塞的)但非阻塞套接字会破坏多处理。如果远程服务器不可用,则无法放弃建立连接。
python ×4
connection ×1
datetime ×1
disconnect ×1
exception ×1
fixtures ×1
raise ×1
sockets ×1
unit-testing ×1