小编Pau*_*man的帖子

使用带有Python assertRaises的上下文管理器

Python文档unittest意味着该assertRaises()方法可以用作上下文管理器.下面的代码给出了一个Python文档中单元测试的简单示例.方法中的assertRaises()调用testsample()工作正常.

现在我想在引发异常的时候访问它,但是如果我将它注释掉,而是取消注释我尝试使用上下文管理器的下一个块,那么AttributeError: __exit__当我尝试执行代码时,我会得到一个.这适用于Python 2.7.2和3.2.2.我可以在try...except块中捕获异常并以这种方式访问​​它,但unittest的文档似乎暗示上下文管理器也会这样做.

还有别的我在这里做错了吗?

class TestSequenceFunctions(unittest.TestCase):

    def setUp(self):
        self.seq = [x for x in range(10)]

    def testshuffle(self):
        # make sure the shuffled sequence does not lose any elements
        random.shuffle(self.seq)
        self.seq.sort()
        self.assertEqual(self.seq, [x for x in range(10)])

    def testchoice(self):
        element = random.choice(self.seq)
        self.assert_(element in self.seq)

    def testsample(self):
        self.assertRaises(ValueError, random.sample, self.seq, 20)

        # with self.assertRaises(ValueError, random.sample, self.seq, 20):
        #     print("Inside cm")

        for element in random.sample(self.seq, 5):
            self.assert_(element in self.seq) …
Run Code Online (Sandbox Code Playgroud)

python unit-testing

12
推荐指数
2
解决办法
8422
查看次数

在蒙面数组上使用numpy.median

在蒙面数组的情况下,我对numpy.median的输出有点困惑.这是一个简单的例子(假设导入了numpy - 我有1.6.2版本):

>>> a = [3.0, 4.0, 5.0, 6.0, numpy.nan]
>>> am = numpy.ma.masked_array(a, [numpy.isnan(x) for x in a])
Run Code Online (Sandbox Code Playgroud)

我希望能够nan在计算中值时使用掩码数组来忽略数组中的值.这适用于使用掩码数组的任numpy.meanmean()方法或方法:

>>> numpy.mean(a)
nan
>>> numpy.mean(am)
4.5
>>> am.mean()
4.5
Run Code Online (Sandbox Code Playgroud)

但是对于中位数我得到:

>>> numpy.median(am)
5.0
Run Code Online (Sandbox Code Playgroud)

但我希望更像这样的结果:

>>> numpy.median([x for x in a if not numpy.isnan(x)])
4.5
Run Code Online (Sandbox Code Playgroud)

而不幸的masked_array是,没有median方法.

python numpy

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

如何在不破坏其他包的情况下声明构建时依赖性?

我在安装依赖的软件包时遇到了问题python-daemon.我最终追溯到python-daemon昨天发布的最新版本的软件包(2.0.3).在Ubuntu 14.04计算机上的虚拟环境中进行测试并发出以下命令:

(venv) $ pip list
argparse (1.2.1)
pip (1.5.6)
setuptools (3.6)
wsgiref (0.1.2)
(venv) $ pip install redis
 ... works fine ....
(venv) $ pip install python-daemon
 ...
 snip
 ...   
 File "/home/pwj/.virtualenvs/venv/local/lib/python2.7/site-packages/pkg_resources.py", line 2147, in load

['__name__'])

ImportError: No module named version

(venv)02:15 PM tmp$ pip list
argparse (1.2.1)
lockfile (0.10.2)
pip (1.5.6)
python-daemon (2.0.3)
setuptools (3.6)
wsgiref (0.1.2)
Run Code Online (Sandbox Code Playgroud)

所以安装python-daemon似乎工作,但影响pipsetuptools因为其他软件包(celery,flask),我尝试使用pip安装后,这给了我相同的回溯:

 ...
 snip
 ...   

 File "/home/pwj/.virtualenvs/venv/local/lib/python2.7/site-packages/pkg_resources.py", …
Run Code Online (Sandbox Code Playgroud)

python setuptools

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

将pandas.DataFrame转换为字节

我需要将存储在a中的数据pandas.DataFrame转换为字节字符串,其中每列可以具有单独的数据类型(整数或浮点).这是一组简单的数据:

df = pd.DataFrame([ 10, 15, 20], dtype='u1', columns=['a'])
df['b'] = np.array([np.iinfo('u8').max, 230498234019, 32094812309], dtype='u8')
df['c'] = np.array([1.324e10, 3.14159, 234.1341], dtype='f8')
Run Code Online (Sandbox Code Playgroud)

和df看起来像这样:

    a            b                  c
0   10  18446744073709551615    1.324000e+10
1   15  230498234019            3.141590e+00
2   20  32094812309             2.341341e+02
Run Code Online (Sandbox Code Playgroud)

DataFrame对各类型列的都知道df.dtypes,所以我想这样做:

data_to_pack = [tuple(record) for _, record in df.iterrows()]
data_array = np.array(data_to_pack, dtype=zip(df.columns, df.dtypes))
data_bytes = data_array.tostring()
Run Code Online (Sandbox Code Playgroud)

这通常工作正常,但在这种情况下(由于存储的最大值df['b'][0].上面的第二行将元组数组转换为np.array具有给定类型的一组导致以下错误:

OverflowError: Python int too large to convert to C long
Run Code Online (Sandbox Code Playgroud)

错误结果(我相信)在第一行中将记录提取为Series具有单个数据类型(默认为float64),并且 …

python numpy type-conversion dataframe pandas

7
推荐指数
1
解决办法
7154
查看次数

curl在tcpdump中没有显示输出

我正试图用它来诊断网络问题tcpdump.我运行命令

tcpdump -i eth0 -nS host nameless.host.io
Run Code Online (Sandbox Code Playgroud)

当我发出命令tracerouteping命令时,nameless.host.io我会看到信息,tcpdump但是当我用来curl从主机检索内容时

curl http://nameless.host.io/mycontent/data
Run Code Online (Sandbox Code Playgroud)

curl命令返回我期望的内容,但我看不到输出tcpdump.主机肯定是"外部的"所以它应该在线上.

为什么tcpdump对成功的curl命令保持沉默?

curl tcpdump

7
推荐指数
1
解决办法
2575
查看次数

anaconda下的环境特定pip.conf

我正在使用Python库并使用anaconda发行版.我将软件包安装到一个conda带有conda和的环境中pip.我想从PyPi和内部存储库服务器(Sonatype Nexus)安装Python包.要做到这一点,我需要设置--extra-index-url标志.

我想使这个可重现,以使任何人都能从脚本重新创建环境,因此--extra-index-url从命令行调用设置pip不是一个选项.

我可以将其设置为全局$HOME/.pip/pip.conf,这有效,但这不能转移给其他用户,至少不能以自动方式.

有没有办法设置conda特定于环境的pip.conf文件?它会放在哪里?这将使任何人都可以检查库代码并重新创建所有依赖关系完整的环境并从内部存储库中提取代码?

python pip conda

6
推荐指数
1
解决办法
6413
查看次数

使用 pandas 转换字符串时间戳

我一直在尝试使用pandas.to_datetime在我的代码库中的时间戳格式之间进行转换,但是当提供字符串输入时,有时pandas似乎无法正确提取 UTC 偏移量:

这是一个正确的转换,UTC 偏移量被正确捕获,反映在 Timestamp 对象中:

In[76]: pd.to_datetime('2014-04-09T15:29:59.999993-0500', utc=True)
Out[76]: Timestamp('2014-04-09 20:29:59.999993+0000', tz='UTC')
Run Code Online (Sandbox Code Playgroud)

这是一个替代字符串表示,它仍然是有效的ISO 8601日期时间字符串,但 UTC 偏移量-0500似乎被忽略:

In[77]: pd.to_datetime('2014-04-09T152959.999993-0500', utc=True)
Out[77]: Timestamp('2014-04-09 15:29:59.999993+0000', tz='UTC')
Run Code Online (Sandbox Code Playgroud)

另一方面,dateutil包可以很好地处理事情:

In[78]: dateutil.parser.parse('2014-04-09T152959.999993-0500')
Out[78]: datetime.datetime(2014, 4, 9, 15, 29, 59, 999993, tzinfo=tzoffset(None, -18000))
Run Code Online (Sandbox Code Playgroud)

我当然可以使用,dateutil但是否有某种原因pandas.to_datetime不能正确处理不同的 ISO 日期时间字符串。我在这里做错了吗?

使用 Python 2.7.6 和 pandas 0.13.1

python datetime pandas

4
推荐指数
1
解决办法
1万
查看次数

为什么json-schema-faker会为所有内容返回拉丁语?

使用以下架构:

并且非常简单package.json,唯一的依赖关系是json-schema-faker(0.5.0.rc16),当我运行以下代码时,我看到输出显示在底部(示例运行)

jsf = require('json-schema-faker');
var schema = {
  "type": "object",
  "properties": {
    "users": {
        "type": "array",
        "minItems": 3,
        "maxItems": 5,
        "items": {
          "type": "object",
          "properties": {
              "id": {
                  "type": "integer",
                  "unique": true,
                 "minimum": 1
              },
              "firstName": {
                  "type": "string",
                  "faker": "name.findName"
              },
              "lastName": {
                  "type": "string",
                  "faker": "name.lastName"
              },
              "email": {
                "type": "string",
                "faker": "internet.email"
              }
          },
         "required": ["id", "firstName", "lastName", "email"]
        }
      }
    }, 
    "required": ["users"]  
};

var mylist = jsf.generate(schema);
console.log("mylist: ", mylist); …
Run Code Online (Sandbox Code Playgroud)

javascript jsonschema json-schema-faker

2
推荐指数
1
解决办法
452
查看次数