许多try/except/finally-clause不仅"uglify"我的代码,而且我发现自己经常对类似的任务使用相同的异常处理.所以我正在考虑通过将它们"外包"给一个装饰来减少冗余.
因为我肯定不是第一个得出这个结论的人,所以我用Google搜索并发现了这个 - imho - 巧妙的配方,增加了处理多个例外的可能性.
但我很惊讶为什么这似乎不是一个广为人知的习惯本身,所以我想知道是否有一个方面我没有考虑?
使用装饰器模式进行异常处理是假的还是我一直都想念它?请赐教!有什么陷阱?
甚至可能有一个包/模块支持以合理的方式创建这样的异常处理?
在我看来,不是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-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) 我不想在我的unittest中创建真实文件.所以我发现自己经常修补无意义的样板并为伪文件创建模拟工厂.我想知道这些毫无意义的努力是否会更好(在这种情况下)并尝试类似于本地unittest方法的范围:
open = lambda x: StringIO()
Run Code Online (Sandbox Code Playgroud)
这样可以吗?或者是否存在重大警告/不采用这种方法并且更好地使用模拟工厂?
如果我想将当前运行的vim-instance/-server的名称传递给外部脚本.我怎么得到它?除了serverlist()似乎没有内部有用的功能来直接访问正在运行的进程的servername(=从当前的vim编辑器会话中).
我希望下面的代码中的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) 场景:
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总的来说,我想知道一个功能是否可行是出于好奇.
这段代码返回"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) 出于纯粹的好奇心:是否有一种简单的方法(不超过两行代码)来访问函数的指定属性的字典/列表(从该函数中)?
例如:
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),但只是在这样做之前没有实例函数对象......和我原来的测试,我最初从函数中定义的属性,那么没有调用函数,而是试图访问功能 - 来自外部范围的属性 - 自然失败了!
必须有一种方法可以在后台打开新选项卡,而无需离开当前选项卡,但我只是在文档中找不到它。
场景:用户 Bob 正在处理文件:foo.txt。外部程序定期更新文件bar.txt。然后,它会在 Bob 的 vim 会话后台打开一个新选项卡,而不会强制 Bob 从前台foo.txt选项卡中当前的编辑状态切换出去。
所有tab*命令似乎都不起作用。我缺少什么?
你可以说我正在寻找相当于 : 的东西tabnew_in_background_leave_edit_mode_as_is()。
python ×8
vim ×2
class ×1
decorator ×1
if-statement ×1
installation ×1
python-2.6 ×1
python-2.7 ×1
singleton ×1
unit-testing ×1