# coding=utf-8
import pytest
def whatever():
return 9/0
def test_whatever():
try:
whatever()
except ZeroDivisionError as exc:
pytest.fail(exc, pytrace=True)
Run Code Online (Sandbox Code Playgroud)
================================ test session starts =================================
platform linux2 -- Python 2.7.3 -- py-1.4.20 -- pytest-2.5.2
plugins: django, cov
collected 1 items
pytest_test.py F
====================================== FAILURES ======================================
___________________________________ test_whatever ____________________________________
def test_whatever():
try:
whatever()
except ZeroDivisionError as exc:
> pytest.fail(exc, pytrace=True)
E Failed: integer division or modulo by zero
pytest_test.py:12: Failed
============================== 1 failed in 1.16 seconds ==============================
Run Code Online (Sandbox Code Playgroud)
如何使pytest打印回溯,所以我会看到whatever函数中引发异常的位置?
例如,我有简单的DF:
import pandas as pd
from random import randint
df = pd.DataFrame({'A': [randint(1, 9) for x in xrange(10)],
'B': [randint(1, 9)*10 for x in xrange(10)],
'C': [randint(1, 9)*100 for x in xrange(10)]})
Run Code Online (Sandbox Code Playgroud)
我可以使用Pandas的方法和习语从"A"中选择"B"的相应值大于50,"C" - 不等于900的值吗?
我正在阅读Angular 2 "5 Min Quickstart"并且有这样一条线:
import { Component } from '@angular/core';"
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚,@这个导入中的符号是什么?TypeScript文档也没有说明这一点.
这是什么意思?
Guido van Rossum在2014年关于Tulip/Asyncio的演讲中展示了幻灯片:
任务与协同程序
相比:
- res =来自some_coroutine的收益率(...)
- res =来自任务的产量(some_coroutine(...))
任务可以在不等待的情况下取得进展
- 作为日志,你等待别的东西
- 即产量
我完全忽略了这一点.
从我的观点来看,两个结构都是相同的:
如果是裸协程 - 它会被调度,所以无论如何都会创建任务,因为调度程序与Tasks一起运行,然后协程调用程序协同程序被暂停,直到被调用者完成,然后可以自由继续执行.
如果Task- 完全相同 - 新任务被调度,调用者协程等待完成.
在这两种情况下执行代码的方式与开发人员在实践中应考虑的影响有何不同?
ps
非常感谢与权威来源(GvR,PEP,docs,核心开发者笔记)的链接.
我使用VirtualBox手动设置和virtualenvs在我的本地机器上运行Django项目.最近我发现Vagrant并决定改用它,因为它看起来非常简单和实用.
但我无法想象 - 我是否还需要使用virtualenv Vagrant VM,是鼓励练习还是被禁止?
Scrapy中的并发设置很少,例如CONCURRENT_REQUESTS.这是否意味着,Scrapy爬虫是多线程的?因此,如果我运行scrapy crawl my_crawler它会直接同时触发多个同时发出的请求?我问,因为,我读过Scrapy是单线程的.
假设我有一个这样的课程:
template <typename T>
struct S {
int n = 1;
S(T t) : n(t) {};
S() = default;
};
Run Code Online (Sandbox Code Playgroud)
S如果我想使用这样的默认构造函数,是否可以更改某些内容以便可以在没有模板参数的情况下实例化S s {};?
我想出的最好的办法是为模板参数分配一些虚假的默认值,使其成为可选的:
#include <iostream>
struct default_ {};
template <typename T = default_>
struct S {
int n = 1;
S(T t) : n(t) {};
S() = default;
};
int main() {
S<int> s1 {10};
std::cout << "Value:\n" << s1.n << std::endl;
S s2 {};
std::cout << "Value:\n" << s2.n << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
gridComplete:
在将所有数据加载到网格中并且所有其他进程完成后,将触发此操作.此事件也会独立于数据类型参数并在对分页等进行排序后触发.
loadComplete:
每个服务器请求后立即执行此事件.data响应中的数据取决于数据类型grid参数
从那些文档中我理解gridComplete在绘制网格结束时loadComplete触发,并在jqGrid完成与后端的通信后触发.
所以我想知道 - 为什么在演示中,loadComplete用于改变细胞的颜色而不是gridComplete?
我正在尝试为Travis CI中的一些PL/Python PostgreSQL程序设置CI.
我尝试了几种方法:
1)使用遗留的基础设施,我试图假设,PL/Python已经安装,但它没有成功:
The command "psql -U postgres -c 'CREATE EXTENSION plpythonu;'" exited with 1.
0.01s$ psql -U postgres -d test -c 'CREATE LANGUAGE plpythonu;'
ERROR: could not access file "$libdir/plpython2": No such file or directory
Run Code Online (Sandbox Code Playgroud)
2)尝试sudo apt-get update && sudo apt-get -y install postgresql-plpython-9.4在开头添加命令.它也失败了,因为这个命令开始替换已经安装在Travis环境中的PostgresSQL 9.4.
3)还试图在配置中使用基于容器的基础设施:
addons:
postgresql: "9.4"
apt:
packages:
- postgresql-plpython-9.4
Run Code Online (Sandbox Code Playgroud)
也没有成功.
在Travis CI中测试PL/Python过程的好方法是什么?
我正在尝试调试Python 2.7的C扩展.我使用python2.7调试版本.我建立我的项目,setuptools我setup.py有这样的台词:
ext_modules=[Extension("my.extension",
["my/_extension.c"])]
Run Code Online (Sandbox Code Playgroud)
当我python setup.py install因某种原因调用扩展时编译为带_d后缀的文件,之后,在Python中,我不能这样做import my.extension,我只能这样做import my.extension_d.而我得到的是:
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "build/bdist.linux-x86_64/egg/my/extension_d.py", line 7, in <module>
File "build/bdist.linux-x86_64/egg/my/extension_d.py", line 6, in __bootstrap__
ImportError: dynamic module does not define init function (initextension_d)
Run Code Online (Sandbox Code Playgroud)
当然我的扩展没有initextension_d,它只有initextension功能.
这非常不方便,因为我必须更改一些代码并将此_d后缀添加到导入和其他内容中.
是否可以关闭此后缀的前置?或者如何以其他方式处理该问题?也许有一些"官方"的方式?
我使用的是Ubuntu Linux.
python ×7
angular ×1
asynchronous ×1
c++ ×1
c++17 ×1
concurrency ×1
datagrid ×1
django ×1
javascript ×1
jqgrid ×1
pandas ×1
plpython ×1
postgresql ×1
pytest ×1
python-3.x ×1
python-c-api ×1
scrapy ×1
testing ×1
travis-ci ×1
typescript ×1
unit-testing ×1
vagrant ×1
virtualenv ×1
web-crawler ×1