小编Don*_*ion的帖子

"外包"异常处理给装饰者

许多try/except/finally-clause不仅"uglify"我的代码,而且我发现自己经常对类似的任务使用相同的异常处理.所以我正在考虑通过将它们"外包"给一个装饰来减少冗余.

因为我肯定不是第一个得出这个结论的人,所以我用Google搜索并发现了这个 - imho - 巧妙的配方,增加了处理多个例外的可能性.

但我很惊讶为什么这似乎不是一个广为人知的习惯本身,所以我想知道是否有一个方面我没有考虑?

  1. 使用装饰器模式进行异常处理是假的还是我一直都想念它?请赐教!有什么陷阱?

  2. 甚至可能有一个包/模块支持以合理的方式创建这样的异常处理?

python exception-handling decorator python-2.6

43
推荐指数
2
解决办法
9171
查看次数

如何在Python 2.7中使用"setup.cfg"而不是setup.py

在我看来,不是distutils.core.setup函数的大量命名关键字参数,而是可以使用与setup.cfg文件相同的目录中的setup.py文件,并且将从setup.cfg文件中读取所有这些关键字.

我想我可以简单地setup.cfg用Python 2.7 创建一个,但是最小的测试版本不起作用.我测试了它setup.py --name,它只是返回:UNKNOWN.

和往常一样,使用python-packaging时,文档会让人感到困惑,因为它永远不清楚,它们与哪个版本相关,或者至少文档有多久.

我的两个设置文件:

setup.py:

from distutils.core import setup
setup()
Run Code Online (Sandbox Code Playgroud)

setup.cfg:

[metadata]
name = foo
version = 0.1
Run Code Online (Sandbox Code Playgroud)

我查看了distutils软件包并发现(除了像地狱一样难看)它似乎mail.message_from_file工厂来阅读setup.cfg.

因为我对一个setup.py单独的方法很好,所以我不会再烦恼这么废话了,但我仍然很好奇如何做到这一点,如果有可能的话.

无论是官方的包装文档还是包装,当局似乎是一个很大的帮助在这里.


几乎每当我觉得有必要调查python的2.x stdlib时,我想知道他们是否试图展示如何不编程.另一方面,C-Code看起来很漂亮.

python installation python-2.7

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

python:类属性/变量继承与多态?

在我作为一个python-apprentice的努力中,如果我尝试使用类属性,我最近陷入了一些奇怪的(从我的角度来看)行为.我不是在抱怨,但是会感谢一些有用的评论来阐明这个问题.

为了将复杂的问题简化为一个更简洁的问题,我会像这样制定:

什么是"pythonic"方法来确保类属性在继承树中的行为更像静态变量?

在我看来,类属性的行为类似于具有多态特征的"读取时复制"默认值.只要我执行"只读"操作它就会保持"单例",但是很快,当我通过派生类或实例访问带有赋值的class-attribute时,它会变成一个新的引用,从而失去与继承了base-reference.

(它肯定有一些有趣的功能,但你必须理解它接受它,所以一些洞察力高度赞赏.)

class A(object):
    classvar = 'A'
    def setclassvar(self, value):
        A.classvar = value                   
    def __str__(self):
        return "%s id(%s) " %(A.classvar, hex(id(A.classvar))[2:-1].upper())

class A1(A):
    pass

class B(object):
    classvar = 'B'
    def setclassvar(self, value):
        self.__class__.classvar = value            
    def __str__(self):
        cvar = self.__class__.classvar
        return "%s id(%s) " %(cvar, hex(id(cvar))[2:-1].upper())

class B1(B):
    def setclassvar(self, value):
        self.__class__.classvar = value

a, a1 = A(), A1()
a1.setclassvar('a')
print "new instance A: %s" %a
print "new instance A1: %s" %a

b, b1 = B(), B1() …
Run Code Online (Sandbox Code Playgroud)

python singleton class

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

Monkey-patch内置函数用于单元测试?

我不想在我的unittest中创建真实文件.所以我发现自己经常修补无意义的样板并为伪文件创建模拟工厂.我想知道这些毫无意义的努力是否会更好(在这种情况下)并尝试类似于本地unittest方法的范围:

open = lambda x: StringIO()
Run Code Online (Sandbox Code Playgroud)

这样可以吗?或者是否存在重大警告/不采用这种方法并且更好地使用模拟工厂?

python unit-testing monkeypatching

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

有没有办法获取当前运行的vim实例的服务器名称?

如果我想将当前运行的vim-instance/-server的名称传递给外部脚本.我怎么得到它?除了serverlist()似乎没有内部有用的功能来直接访问正在运行的进程的servername(=从当前的vim编辑器会话中).

vim

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

在python中启动多个线程

我希望下面的代码中的saveData函数同时执行.但相反,在第一次运行saveData后,我得到了错误:

Traceback (most recent call last):
  File "preProcess.py", line 70, in <module>
    run()        
  File "preProcess.py", line 61, in run
    thread.start_new_thread(saveData(slice1, slice2, slice3, dset), ("Thread-" + str(i), 1, ) )
TypeError: first arg must be callable
Run Code Online (Sandbox Code Playgroud)

我的代码是

#!/usr/bin/env python
import sys

import numpy as np
import h5py
import scipy
from PIL import Image
import timeit
import thread

import matplotlib.pyplot as plt

def saveImage(array, filename):
  fig=plt.figure(figsize=(4,3))
  ax=fig.add_subplot(1,1,1)
  plt.axis('off')
  p = plt.imshow(array)
  p.set_cmap('gray')
  extent = ax.get_window_extent().transformed(fig.dpi_scale_trans.inverted())
  plt.savefig(filename, bbox_inches=extent) 

def saveData(value1, value2, value3, dset): …
Run Code Online (Sandbox Code Playgroud)

python multithreading

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

是否可以将参数解包操作符(也称为splash操作符)实现为函数?

场景:

kwargs = dict(a=1, b=2)
def test(a=None, b=None): return a, b

def unpack(kwargs):
    ...
    return whatever    

test(unpack(kwargs))  # instead of test(**kwargs)
>> 1, 2
Run Code Online (Sandbox Code Playgroud)

我疲惫的头脑可以解决的唯一解决方案是扭转整个混乱,如:

def unpack(f, kwargs):
    return f(**kwargs)

unpack(test, kwargs)
>> 1, 2
Run Code Online (Sandbox Code Playgroud)

至于原因:没有迫切需要.但unpack总的来说,我想知道一个功能是否可行是出于好奇.

python

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

如果是Python中的比较语句

这段代码返回"cat","dog","hamster" "unicorn",但它根本不应该返回"独角兽"!这有什么理由吗?

if random.randint(0,10) < 5:
    print("dog")    
elif  random.randint(0,10) > 5:
    print("cat")    
elif  random.randint(0,10) == 5:
    print("hamster")    
else:
    print("unicorn")
Run Code Online (Sandbox Code Playgroud)

python if-statement

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

python的函数属性:获取所有已分配属性的列表/字典

出于纯粹的好奇心:是否有一种简单的方法(不超过两行代码)来访问函数的指定属性的字典/列表(从该函数中)?

例如:

def func(*args):
    print("# of arguments = {0} ".format(len(args)))       # normal arguments
    print("# of attributes = {0}".format(len(func_attrs))) # function-attributes

func()

func.func_attr_1 = 'How do i get all attributes from within the associated function?'
func.func_attr_2 = 'How do i get all attributes from within the associated function?'
Run Code Online (Sandbox Code Playgroud)

由于函数是可调用对象,因此可以为它们提供属性,但似乎没有办法以简单的方式访问这些属性的列表.

locals()globals()没有帮助. dir()似乎可以做到这一点,但你必须过滤你的属性.如果您事先不知道属性名称,这有点不方便.

如果我可以分配属性,那么必须......应该是一种从内部访问其目录的方法.

更新:

我完全忘记在尝试访问属性之前实际调用/ invoke =实例化该函数.... 我的错! - sry和thx的答案;-)

当然,我试过func.__dict__dir(func),但只是在这样做之前没有实例函数对象......和我原来的测试,我最初从函数中定义的属性,那么没有调用函数,而是试图访问功能 - 来自外部范围的属性 - 自然失败了!

python

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

如何在新选项卡中打开文件或缓冲区而不离开当前选项卡且无需切换编辑模式?

必须有一种方法可以在后台打开新选项卡,而无需离开当前选项卡,但我只是在文档中找不到它。

场景:用户 Bob 正在处理文件:foo.txt。外部程序定期更新文件bar.txt然后,它会在 Bob 的 vim 会话后台打开一个新选项卡,而不会强制 Bob 从前台foo.txt选项卡中当前的编辑状态切换出去。

所有tab*命令似乎都不起作用。我缺少什么?

你可以说我正在寻找相当于 : 的东西tabnew_in_background_leave_edit_mode_as_is()

vim

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