小编Bor*_*jaX的帖子

如何比较Python中的版本号?

我正在走一个包含鸡蛋的目录,将这些鸡蛋添加到鸡蛋中sys.path.如果目录中有相同.egg的两个版本,我想只添加最新版本.

我有一个正则表达式r"^(?P<eggName>\w+)-(?P<eggVersion>[\d\.]+)-.+\.egg$从文件名中提取名称和版本.问题是比较版本号,这是一个字符串2.3.1.

因为我正在比较字符串,2种类型超过10,但这对于版本来说不正确.

>>> "2.3.1" > "10.1.1"
True
Run Code Online (Sandbox Code Playgroud)

我可以做一些拆分,解析,转换为int等,我最终会得到一个解决方法.但这是Python,而不是Java.有比较版本字符串的优雅方法吗?

python version string-comparison

205
推荐指数
8
解决办法
9万
查看次数

模块没有属性

我有一个包含许多.py文件的目录.每个文件定义一些类.我__init__.py在目录中也有一个空.

例如:

myproject
    __init__.py
    mymodule
        __init__.py
        api.py
        models.py
        views.py
Run Code Online (Sandbox Code Playgroud)

我试图导入mymodule并访问所有这些文件中定义的类:

from myproject import mymodule

print mymodule.api.MyClass 
Run Code Online (Sandbox Code Playgroud)

它给我一个错误,说mymodule没有属性api.为什么?为什么我只能访问其中一个文件(models.py)而不访问其他文件?

In [2]: dir(banners)
Out[2]:
['__builtins__',
 '__doc__',
 '__file__',
 '__name__',
 '__package__',
 '__path__',
 'models']
Run Code Online (Sandbox Code Playgroud)

python

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

迭代一定次数而不将迭代次数存储在任何地方

我想知道是否可以在不将循环迭代次数存储在任何地方的情况下执行一定数量的操作.

例如,假设我想将两条"hello"消息打印到控制台.现在我知道我能做到:

for i in range(2):
    print "hello"
Run Code Online (Sandbox Code Playgroud)

但随后的i变量是要采取的价值观01(我并不真的需要).有没有办法实现同样的事情而不将这些不需要的值存储在任何地方?

python loops range

44
推荐指数
5
解决办法
11万
查看次数

为什么Python的日志记录模块不遵循PEP8约定?

这只是一个历史目的的好奇心:

我想知道是否有人知道为什么广泛使用的(和核心模块)日志记录 不遵循Python的PEP-8命名约定.

例如,在

>>> import logging
>>> log = logging.getLogger("hello")
Run Code Online (Sandbox Code Playgroud)

我希望它是get_logger,但事实并非如此.

功能名称方面,PEP8标准说:

只有在已经是主流风格(例如threading.py)的上下文中才允许使用mixedCase,以保持向后兼容性.

那是这样的吗?如果是这样,还有什么其他logging东西必须保持向后兼容性?或者仅仅是开发人员logging感觉喜欢使用驼峰式命名?

当然,该模块已有详细记录,并不是什么大不了的事.我只是好奇.

python logging pep8

34
推荐指数
1
解决办法
2629
查看次数

在virtualenv中安装Python-Dbus

我在需要访问DBus的虚拟环境中运行应用程序(主要是与网络管理器交互).

我尝试使用easyinstall和pip安装Dbus-Python,但都失败了.

当我尝试这样做时:

(myvirtualenv)borrajax@borrajax-computer:~/Documents/Projects/VirtualEnvs/current_env$ bin/pip install dbus-python
Run Code Online (Sandbox Code Playgroud)

皮普对我大吼大叫:

Downloading/unpacking dbus-python
  Downloading dbus-python-1.1.1.tar.gz (596kB): 596kB downloaded
  Running setup.py egg_info for package dbus-python
    Traceback (most recent call last):
      File "<string>", line 16, in <module>
    IOError: [Errno 2] No such file or directory: '/home/borrajax/Documents/Projects/VirtualEnvs/current_env/build/dbus-python/setup.py'
    Complete output from command python setup.py egg_info:
    Traceback (most recent call last):

  File "<string>", line 16, in <module>

IOError: [Errno 2] No such file or directory: '/home/borrajax/Documents/Projects/VirtualEnvs/current_env/build/dbus-python/setup.py'

----------------------------------------
Command python setup.py egg_info failed with error code 1 in /home/borrajax/Documents/Projects/VirtualEnvs/current_env/build/dbus-python …
Run Code Online (Sandbox Code Playgroud)

python installation dbus virtualenv

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

覆盖python中的类变量

我试图理解Python(2.6)如何处理类,实例等,在某个时刻,我尝试了这段代码:

#/usr/bin/python2.6

class Base(object):
    default = "default value in base"

    def __init__(self):
        super(Base, self).__init__()

    @classmethod
    def showDefaultValue(cls, defl = default):
        print "defl == %s" % (defl)


class Descend(Base):
    default = "default value in descend"

    def __init__(self):
        super(Descend, self).__init__()

if __name__ == "__main__":
    Descend.showDefaultValue()
Run Code Online (Sandbox Code Playgroud)

输出为:"基数默认值"

我想知道为什么"默认"字段没有被Descend类覆盖......有没有办法覆盖它?为什么不被覆盖?

任何提示(或解释页面的链接将不胜感激).谢谢!

python oop inheritance class-design

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

为什么type(classInstance)返回'instance'?

我有一个方法接受一个可以是几种类型的参数,并且必须根据类型做一件事,但是如果我检查所述参数的类型,我不会得到'真实'类型,我总是得到<type 'instance'>,这就是我的比较搞乱了.

我有类似的东西:

from classes import Class1
from classes import Class2
# Both classes are declared in the same file.
# I don't know if that can be a problem         #
# ... #
def foo(parameter)
    if (type(parameter) == type(Class1()):
    # ... #
    elif (type(parameter) == type(Class2()):
    # ... #
Run Code Online (Sandbox Code Playgroud)

而作为type(parameter)回报<type 'instance'>,并type(Class1())<type 'instance'>为好,事实证明,即使参数为Class2中的一个实例,它是进入第一比较...

顺便说一句,str(parameter.__class__)正确显示classes.Class1.我想我总是可以使用它,但我想了解发生了什么...我已经做了十分之一的比较,所有这些都正常工作......

谢谢!!:)

python types class instance

11
推荐指数
3
解决办法
5166
查看次数

SqlAlchemy - 按字段过滤定义为ForeignKey

我试图通过作为外键的字段来过滤类的实例,但是当我尝试这样做时,我总是得到数据库中的所有条目,而不是符合条件的条目.

假设我在一个简单的N:1关系中使用了声明式基类.我的建模如下:

#!/usr/bin/python2.6
class ContainerClass(declarativeBase):
     __tablename__ = "container_classes"
     _id = Column("id", Integer, primary_key=True)
     id = sqlalchemy.orm.synonym('_id', descriptor=property(getId, setId))


class WhateverClass(declarativeBase):
     __tablename__ = "whatever_classes"

     _id = Column("id", Integer, primary_key=True)
     _total = Column("total", Integer)
     _containerClassId = Column("container_class_id", Integer, ForeignKey("other_classes.id"))

     _containerClass = relationship("ContainerClass", uselist=False)

     id = sqlalchemy.orm.synonym('_id', descriptor=property(getId, setId))
     total = sqlalchemy.orm.synonym('_total', descriptor=property(getTotal, setTotal))
     containerClassId = sqlalchemy.orm.synonym('_containerClassId', decriptor=property(getContainerClassId, setContainerClassId))
     containerClass = sqlalchemy.orm.synonym('_containerClass', descriptor=property(getContainerClass setContainerClass))
Run Code Online (Sandbox Code Playgroud)

"WhateverClass"的实例可以属于"ContainerClass"的一个实例(并且每个ContainerClass可以具有WhateverClass的多个实例).这种关系似乎运作良好.如果我向"ContainerClass"添加一个新的"WhateverClass",那么whateverClass.containerClassId将正确获取它所属的ContainerClass的值.

但是,假设我需要获取一个属于"ContainerClass"的"WhateverClass"实例列表,其中id == 5.

如果我尝试做:

from myClasses import WhateverClass
session.query(WhateverClass.WhateverClass).filter(WhateverClass.WhateverClass.containerClass.id == 5).all()
Run Code Online (Sandbox Code Playgroud)

我得到了存储在数据库中的所有WhateverClass实例,而不仅仅是那些链接到具有id == 5的ContainerClass的实例

但是,如果我执行session.query(WhateverClass.WhateverClass).filter(total <= 100).all() …

python sqlalchemy foreign-key-relationship relational-database

9
推荐指数
1
解决办法
9529
查看次数

防止浏览器使用默认/回退字体

我有一个Web应用程序,用户可以在其中更改WSIWYG类型的输入文本区域的字体系列.现在,假设用户在文本区域输入了一些中文文本,但选择了一个不支持中文字符的Font.在我的应用程序中,我希望用户看到那些通常在字体不支持字符时显示的讨厌的正方形(或类似的东西).这样,用户就会知道该字体不支持该语言并且可以选择不同的语言.我遇到的问题是浏览器(Firefox 17和Chrome 23)似乎使用支持这些中文字符的字体(如Arial)呈现文本的中文部分,使用户相信他正在尝试使用的字体工作良好.

有没有办法(我猜通过CSS)来阻止这种情况?有没有办法让浏览器不仅仅是这么"好"?

先感谢您.

html css fonts internationalization

9
推荐指数
2
解决办法
2434
查看次数

Python celery:如果有异常,则检索任务参数

我开始使用Celery和Python,我有一个问题可能非常简单,但我似乎无法找到任何合适的答案......

如果我有一堆任务,并且其中一个抛出异常,是否有办法检索传递给所述任务的参数?

例如,如果我想获取一些主机名解析的IP,我创建一个任务......

@tasks_app.task
def resolve_hostname(hostname):
    return (hostname, {hst.address for hst in dns.resolver.query(hostname)})
Run Code Online (Sandbox Code Playgroud)

...可以抛出异常,是否有一种方法可以在hostname异常发生时将该参数的值置于调用之外?

假设我将任务分组如下:

ip_subtasks = group(
    resolve_hostname.s(hostname) for hostname in ['google.com',
                                                  'yahoo.com',
                                                  'failure.kommm']
)()
Run Code Online (Sandbox Code Playgroud)

最后一个(试图解决failure.kommm)将引发异常.我想get()将芹菜任务的方法放在一个try/catch,并在尝试解决failure.kommm(如下所示)显示一条消息说出现问题:

for ip_subtask in ip_subtasks:
    try:
        hostname, ips = ip_subtask.get(timeout=45)
    except dns.exception.DNSException, e:
        # I WISHED THIS WORKED:
        logger.exception("Something happened when trying"
                         " to resolve %s" % ip_subtask.args[0])
Run Code Online (Sandbox Code Playgroud)

所以,这就是问题......如果我有任务实例本身,有没有办法检索任务执行的参数?

先感谢您.

python exception-handling celery

9
推荐指数
1
解决办法
2905
查看次数