小编pfc*_*ise的帖子

Python中的这种赋值是什么叫做?a = b =真

我知道有关元组拆包的内容,但是这个赋值是什么,你在一行上有多个等号?一个啦a = b = True

当RHS可变时,它总是让我感到沮丧,但我在找到正确的关键词以便在文档中搜索时遇到了麻烦.

python variable-assignment

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

Python中适当的方法在设置变量时引发错误

在课堂上进行错误检查的正确方法是什么?提出例外?设置包含所有错误并返回错误的实例变量字典"errors"?

从类中打印错误是不是很糟糕?如果我提出异常,我是否必须返回False?

只是想确保我做得对.以下是一些示例代码:

@property
def password(self):
    return self._password

@password.setter
def password(self,password):
    # Check that password has been completed
    try:
        # Check that password has a length of 6 characters
        if (len(password) < 6):
            raise NameError('Your password must be greater \
                             than 6 characters')

    except NameError:
        print 'Please choose a password'
        return False

    except TypeError:
        print 'Please choose a password'
        return False                                                                                                                                

    #Set the password
    self._password = password

    #Encrypt the password
    password_md5 = md5.new()
    password_md5.update(password)
    self._password_md5 = password_md5.hexdigest()
Run Code Online (Sandbox Code Playgroud)

python error-handling

27
推荐指数
2
解决办法
5万
查看次数

Django - 如何为模型指定数据库?

有没有办法指定模型(或应用程序,甚至)应该只使用一个特定的数据库?

我正在使用一个我不想改变的遗留数据库.我有两个数据库 - 'default'是可以用于管理员等的sqlite数据库,也可以是旧数据库.我使用了inspectdb为遗留数据库(的一部分)创建了一个模型,它有 managed = False.但有没有办法在模型中指定它只适用于特定的数据库?

我看到你可以在一些查询集等中指定using=databasename,但这对像Databrowse这样的东西是不利的(也可能是通用视图?).可能是Databrowse的一个短缺,你不能指定一个数据库,但它似乎是指定它的正确位置是模型...

然后我想也许答案是编写一个只引用我的遗留数据库的自定义模型管理器 - 但是文档没有提到类似的东西.

对于Django世界,我是否只有一个不同的心理模型可以使用多个数据库?

django django-models multiple-databases django-database

25
推荐指数
6
解决办法
2万
查看次数

如何将S5演示文稿转换为PDF?

我正在使用reStructuredTextrst2s5来创建S5幻灯片演示文稿.这很棒,但我也希望以PDF格式进行演示.如何将S5转换为PDF?

S5是基于HTML的... S5功能之一是创建演示文稿的打印输出.因此,当我尝试从浏览器中使用PDF打印机时,我只是打印出来.我想要带有幻灯片的PDF,每页1张幻灯片以及原始演示文稿中的所有格式,颜色和字体大小.

pdf restructuredtext presentation slideshow

10
推荐指数
1
解决办法
2740
查看次数

py.test - 如何在funcarg/fixture中使用上下文管理器

密切相关: 在python中,在setup/teardown中使用上下文管理器是否有一个很好的习惯用法


我有一个上下文管理器,用于测试以修复时间/时区.我想把它放在pytest funcarg(或夹具中,我们使用pytest2.2.3,但我可以向后翻译).我可以这样做:

def pytest_funcarg__fixedTimezone(request):
    # fix timezone to match Qld, no DST to worry about and matches all
    # Eastern states in winter.
    fixedTime = offsetTime.DisplacedRealTime(tz=' Australia/Brisbane')

    def setup():
        fixedTime.__enter__()
        return fixedTime

    def teardown(fixedTime):
        # this seems rather odd?
        fixedTime.__exit__(None, None, None)
Run Code Online (Sandbox Code Playgroud)

......但它有点icky.在相关的问题中,jsbueno指出:问题在于,__exit__如果发生异常,您的代码无法正确调用对象的方法.

他的回答使用了元类方法.但这对pytest来说并不是那么有用,因为pytest通常只是函数,而不是类.那么解决这个问题的方法是什么?什么涉及测试钩

contextmanager pytest

8
推荐指数
2
解决办法
3639
查看次数

在集成更改之前,哪些版本控制程序可以强制执行测试的运行和传递?

在我的工作中,我们目前使用Aegis版本控制/ SCM.我们配置它的方式,我们有一堆测试,它强制以下事情是真实的,然后才能集成更改:

  • 必须运行完整的测试集.
  • 所有测试都必须通过.

通过测试驱动开发(TDD),这些似乎是明智的要求.但我还没有听说过任何其他版本控制系统可以做到这一点.(我们目前不打算转换,但我想知道将来如何不使用Aegis.)

我会对任何可以做到这一点的VCS(分布式或非分布式)感兴趣,我也对现有VCS的任何插件/扩展感兴趣.优选地是开源软件.

ETA:好的,似乎通常要做的是拥有VCS +持续集成软件,并且运行测试是作为构建的一部分自动化的,而不是单独的步骤.如果我理解正确,那仍然允许您提交未通过测试的代码,只是您收到通知 - 是吗?有什么东西可以阻止你完全集成/提交它吗?

testing version-control tdd aegis

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

使用字符串文字作为Django模板中模板标记的参数

我发现自己经常做的一件事就是将字符串文字作为参数传递给模板标签或函数; 例如:

{% url my-url 'my_param' %}
Run Code Online (Sandbox Code Playgroud)

不幸的是,django模板引擎不允许你这样做.所以我发现自己在我的视图代码中做了很多这样的事情:

my_context_dict['MY_PARAM'] = 'my_param'
Run Code Online (Sandbox Code Playgroud)

然后在我的视图代码中:

{% url my-url MY_PARAM %}
Run Code Online (Sandbox Code Playgroud)

或者创建一系列URL映射,我个人试图避免.

是否可以在Django模板中使用字符串文字?或者可能是更优雅的解决方案?我在这里或文档中没有看到任何内容.

django templates django-templates

7
推荐指数
2
解决办法
7803
查看次数

在namedtuple类上自定义排序

经常使用namedtuple类.我一直在想今天是否有一种很好的方法来为这样的类实现自定义排序,即使默认排序键不是namedtuple的第一个元素(然后是第二个,第三个等).

我的第一直觉是实现__lt____eq__total_ordering剩下的工作完成(它填写了le,ne,gt,ge):

from collections import namedtuple
from functools import total_ordering


@total_ordering
class B(namedtuple('B', 'x y')):
    def __lt__(self, other):
        return self.y < other.y
Run Code Online (Sandbox Code Playgroud)

然而:

def test_sortingB():
    b1 = B(1, 2)
    b2 = B(2, 1)
    assert b2 < b1  # passes
    assert b2 <= b1  # fails
Run Code Online (Sandbox Code Playgroud)

哦,对...... 如果缺少total_ordering其他方法,则只填写其他方法.由于tuple/namedtuple有这样的方法,total_ordering对我没有任何作用.

所以我想我的选择是

  1. 停止使用namedtuple并构建我自己的无聊类,继续使用total_ordering
  2. 继续使用namedtuple并实现所有6种比较方法
  3. 继续使用namedtuple并插入排序值作为第一个字段.幸运的是,我没有太多的课程实例,但通常我只是依靠字段的顺序来初始化它们,这可能是令人讨厌的.也许这是一个坏习惯.

关于解决这个问题的最佳方法的建议?

python sorting namedtuple functools

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

使用factory_boy和SQLAlchemy以及类方法

我正在使用SQLAlchemy作为ORM的Pyramid应用程序.我试图用类方法测试模型:

# this is essentially a global used by all the models
Session = scoped_session(sessionmaker(autocommit=False))

class Role(Base):
    __tablename__ = 'role'

    id = sa.Column(sa.types.Integer, primary_key=True)
    name = sa.Column(sa.types.Text, unique=True, nullable=False)

    def __init__(self, **kwargs):
        super(Role, self).__init__(**kwargs)

    @classmethod
    def find_all(self):
        return Session.query(Role).order_by(Role.name).all()
Run Code Online (Sandbox Code Playgroud)

我正在使用factory_boy进行测试,以下是我尝试设置测试工厂的方法:

import factory
from factory.alchemy import SQLAlchemyModelFactory
from sqlalchemy.orm import scoped_session, sessionmaker
from zk.model.meta import Base
from zk.model.role import Role

session = scoped_session(sessionmaker())
engine = create_engine('sqlite://')
session.configure(bind=engine)
Base.metadata.create_all(engine)

class RoleFactory(SQLAlchemyModelFactory):
    FACTORY_FOR = Role
    FACTORY_SESSION = session
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试调用RoleFactory.find_all()测试时,我收到一个错误: …

python sqlalchemy class-method factory-boy

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

如何将一些生成的测试标记为 xfail/skip?

使用 py.test 我经常生成一些测试用例预计会失败的测试。我如何将它们标记为 xfail?如果我将 放在@py.test.mark.xfail测试函数上,则意味着它的所有实例都是 xfail。如果我py.test.xfail()在测试中执行此操作,它实际上会导致测试失败,而不仅仅是将其标记为 xfail。我可以用 metafunc 做些什么来添加这个标记吗?

例如

# code - function with a bug :)

def evenHigherThanSquare(n):
    return n**2


# test file

def pytest_generate_tests(metafunc):
    data = [
        (2, 4),
        (3, 10), # should be xfail
        (4, 16),
        (5, 26), # should be xfail
        ]
    for input, expected in data:
        if metafunc.function is test_evenHigherThanSquare:
            metafunc.addcall(funcargs=dict(input=input, expected=expected))


def test_evenHigherThanSquare(input, expected):
    assert evenHigherThanSquare(input) == expected
Run Code Online (Sandbox Code Playgroud)

python testing pytest

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