这里有四个简单的assert调用:
>>> assert 1==2
Traceback (most recent call last):
File "<stdin>", line 1, in ?
AssertionError
>>> assert 1==2, "hi"
Traceback (most recent call last):
File "<stdin>", line 1, in ?
AssertionError: hi
>>> assert(1==2)
Traceback (most recent call last):
File "<stdin>", line 1, in ?
AssertionError
>>> assert(1==2, "hi")
Run Code Online (Sandbox Code Playgroud)
请注意,最后一个不会引发错误.调用带或不带括号的断言会导致这种行为有什么区别?我的做法是使用括号,但上面的建议我不应该这样做.
这是将python"with"语句与try-except块结合使用的正确方法吗?:
try:
with open("file", "r") as f:
line = f.readline()
except IOError:
<whatever>
Run Code Online (Sandbox Code Playgroud)
如果是,那么考虑旧的做事方式:
try:
f = open("file", "r")
line = f.readline()
except IOError:
<whatever>
finally:
f.close()
Run Code Online (Sandbox Code Playgroud)
这里"with"语句的主要好处是我们可以摆脱三行代码吗?对于这个用例来说,这似乎并不令我感到高兴(尽管我理解"with"语句还有其他用途).
编辑:上面两个代码块的功能是否相同?
EDIT2:前几个答案一般性地讨论了使用"with"的好处,但这些似乎在边缘效益.我们已经(或应该已经)多年来明确地调用f.close().我想一个好处是,草率编码器将从使用"with"中受益.
另一位开发人员和我不同意是否应该使用PYTHONPATH或sys.path来允许Python在用户(例如,开发)目录中查找Python包.
我们有一个具有典型目录结构的Python项目:
Project
setup.py
package
__init__.py
lib.py
script.py
Run Code Online (Sandbox Code Playgroud)
在script.py中,我们需要这样做import package.lib
.当软件包安装在site-packages中时,script.py可以找到package.lib
.
但是,当从用户目录工作时,还需要做其他事情.我的解决方案是将我的PYTHONPATH设置为包含"〜/ Project".另一位开发人员希望将这行代码放在script.py的开头:
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
Run Code Online (Sandbox Code Playgroud)
这样Python就可以找到本地副本了package.lib
.
我认为这是一个坏主意,因为这行只对开发人员或从本地副本运行的人有用,但我不能说明为什么这是一个坏主意.
我们应该使用PYTOHNPATH,sys.path,还是要么?
有时将相关数据聚集在一起是有意义的.我倾向于用dict这样做,例如,
self.group = dict(a=1, b=2, c=3)
print self.group['a']
Run Code Online (Sandbox Code Playgroud)
我的一位同事更喜欢创建一个班级
class groupClass(object):
def __init__(a, b, c):
self.a = a
self.b = b
self.c = c
self.group = groupClass(1, 2, 3)
print self.group.a
Run Code Online (Sandbox Code Playgroud)
请注意,我们没有定义任何类方法.
我喜欢使用dict,因为我喜欢最小化代码行数.我的同事认为如果使用类,代码更具可读性,并且将来更容易向类中添加方法.
你更喜欢哪个?为什么?
我很惊讶地发现子类的类变量无法访问父类的类变量而没有明确指出父类的类名:
>>> class A(object):
... x = 0
...
>>> class B(A):
... y = x+1
...
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 2, in B
NameError: name 'x' is not defined
>>> class B(A):
... y = A.x + 1
...
>>> B.x
0
>>> B.y
1
Run Code Online (Sandbox Code Playgroud)
为什么在定义中我必须引用Ax而不仅仅是x?这与我对实例变量的直觉相反,因为我可以在定义B之后引用Bx.
是否有一种简单的pythonic方法可以在不使用浮点的情况下舍入到最接近的整数?我想做以下但使用整数运算:
skip = int(round(1.0 * total / surplus))
Run Code Online (Sandbox Code Playgroud)
==============
@John:浮点数不能跨平台重现.如果您希望您的代码在不同平台上传递测试,那么您需要避免浮点(或者在测试中添加一些hacky espilon内容并希望它能够正常工作).以上可能很简单,在大多数/所有平台上都是相同的,但我宁愿不做出这个决定,因为更容易完全避免浮点.那"不符合Python的精神"怎么样?
我正在尝试在 Google App Engine 上部署一个 Django 应用程序。我按照此处给出的说明进行操作。唯一的问题是,当我执行命令时,gcloud app deploy
我会收到错误消息:
错误:(gcloud.app.deploy) NOT_FOUND:无法从 GAIA 检索 P4SA:[service-290226755412@gcp-gae-service.iam.gserviceaccount.com]。可能是 GAIA 传播延迟或来自已删除应用的请求。
我在网上没有找到任何东西,无法通过。提前致谢!
我正在使用testbed对我的谷歌应用引擎应用进行单元测试,而我的应用使用了一个任务队列.
当我在单元测试期间向任务队列提交任务时,似乎任务在队列中,但任务不会执行.
如何在单元测试期间执行任务?
我正在使用jQueryUI创建一个可排序的列表,而UI部分的工作非常好,因为我可以根据需要在网页上对项目进行排序.但是,我无法弄清楚如何将排序列表的顺序包含在POST中.我是javascript的总菜鸟所以如果这很简单,请原谅我.
以下是我的html的相关部分:
<script type="text/javascript">
google.load("jquery", "1");
google.load("jqueryui", "1");
function OnLoad(){
$( "#sortable" ).sortable({ axis: "y", containment: "#ballot", scroll: false });
$( "#sortable" ).disableSelection();
}
google.setOnLoadCallback(OnLoad);
</script>
[...]
<form method="POST" action="/vote">
<input type="hidden" name="key" value="{{ election.key }}">
<input type="hidden" name="uuid" value="{{ uuid }}">
<div id="ballot" class="center">
<ol id="sortable" class="rankings">
<li class="ranking">Jamie</li>
<li class="ranking">Joanie</li>
<li class="ranking">Morley</li>
<li class="ranking">Frank</li>
<li class="ranking">Larry</li>
</ol>
</div>
</form>
Run Code Online (Sandbox Code Playgroud)
Jamie,Joanie,Morley,Frank和Larry的命令如何在POST中编码?
虽然有很多这样的问题,请跟我说,因为我认为我的不同......
我有一个5美元的Python应用程序,我使用py2exe,py2app和Linux的源代码分发.该应用程序具有一年的许可证,因此人们需要在一年后升级到更新的版本.我想添加一些简单的许可证保护来强制执行一年的限制.由于应用程序只有5美元,我不在乎它是否容易绕过.只是有一些东西会鼓励许多用户在一年后支付5美元升级而不是忽略许可.
注意:
我的第一个想法是简单地记录安装日期(例如,使用wxConfig)并在一年后使用礼貌消息禁用软件以请升级.
有没有更好的解决方案呢?
python ×8
assert ×1
class ×1
deployment ×1
dictionary ×1
django ×1
except ×1
finally ×1
forms ×1
javascript ×1
jquery-ui ×1
licensing ×1
parentheses ×1
post ×1
py2app ×1
py2exe ×1
pythonpath ×1
rounding ×1
struct ×1
subclass ×1
sys.path ×1
task-queue ×1
try-catch ×1
unit-testing ×1