我在try子句中有一个命令,我知道抛出异常.我试图在"except"子句中捕获它,但except子句似乎无法识别异常的存在.未处理(即未包含在try子句中)的异常在交互式窗口中如下所示:
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "C:\Users\Andy\software\Turkeys\actions.py", line 234, in annotate
annotation=annotator.ncbo_annotate(thing)
File "C:\Users\Andy\software\Turkeys\annotator.py", line 49, in ncbo_annotate
fh = urllib2.urlopen(submitUrl, postData)
File "C:\32Python27\lib\urllib2.py", line 126, in urlopen
return _opener.open(url, data, timeout)
File "C:\32Python27\lib\urllib2.py", line 406, in open
response = meth(req, response)
File "C:\32Python27\lib\urllib2.py", line 519, in http_response
'http', request, response, code, msg, hdrs)
File "C:\32Python27\lib\urllib2.py", line 444, in error
return self._call_chain(*args)
File "C:\32Python27\lib\urllib2.py", line 378, in _call_chain
result = func(*args)
File "C:\32Python27\lib\urllib2.py", …Run Code Online (Sandbox Code Playgroud) 我想调用一种方法给我一个所有"非私有"的词典(我在这里使用"私有"一词,因为它在Python中并不存在)和非内置属性(即那些在类上不要以单个或双下划线开头.像vars(MyClass)这样的东西只能返回该类的"公共"属性.
我知道
from M import *
Run Code Online (Sandbox Code Playgroud)
不会导入名称以下划线开头的对象.(http://www.python.org/dev/peps/pep-0008/#id25)导入如何实现?通过内置函数或仅通过检查下划线?什么是pythonic方法呢?
例:
class MyClass(object):
def __init__(self):
do_stuff()
def _private(self):
print 'private'
def __gets_name_mangled(self:
print 'becomes _MyClass__gets_name_mangled()'
def public(self):
print 'public'
Run Code Online (Sandbox Code Playgroud)
如果我做
vars(MyClass).keys()
Run Code Online (Sandbox Code Playgroud)
我明白了
['_MyClass__gets_name_mangled', '__module__', '_private', '__doc__', '__dict__', '__weakref__', 'public', '__init__']
Run Code Online (Sandbox Code Playgroud)
我怎么才能得到
['public']
Run Code Online (Sandbox Code Playgroud)
或者我只是需要自己检查下划线?看起来似乎会有一种pythonic方式来做到这一点.
我想使用Django模板变量渲染一些静态文件(特别是*.js).我相信这是一个常见的用例,尤其是在做任何AJAX-y时; 我不想在我的.js文件中硬编码AJAX网址,只是想在我的.html文件中对它们进行硬编码.Buuuut当然我不希望那些静态文件在每个客户端请求都必须通过模板引擎运行,因为这会很慢.我指的是诸如URL(在编译/部署之后不会改变)或静态(非db)模型属性之类的东西.(我想有些用例可能会在运行时更改这些内容 - 毕竟这是Python,但我认为它们并不常见).对于一些可能的模板变量(例如模型字段),当然必须在客户端请求时呈现文件,但这不是我所说的.
因此,通过模板引擎渲染我的一些静态文件,对于可能的模板变量的子集,可能同时也是如此有意义collectstatic吗?
据我所知,目前情况并非如此.要清楚,我正在寻找的是在编译/部署时通过模板引擎呈现静态文件的解决方案,以便在"客户端请求时"它们实际上是普通的旧静态文件.
这种方法可以避免这些黑客攻击:
免责声明:
所以:
collectstatic(比如一个pre-collectstatic钩子),允许人们在"收集"它们之前通过模板引擎渲染某些静态文件?编辑:还没有回答......这是一个非常愚蠢的问题,我错过了一些明显的东西?如果是这样......继续告诉我......
(编辑:我得到了很多关于实现的答案(我很感激),但我更关心的是规范语法.这个插件的用户(即Python/Django开发人员 - 不是网站用户)需要指定条件在我正在发明的语法中.所以重新解释这个问题......在编写模型或表单类时...... 原型Python/Django开发人员更喜欢为表单字段指定条件显示逻辑以下哪种语法? )
我正在寻找一些建议用于最pythonic(可读,直接等)的方式来指定比较运算符以供稍后在比较中使用(通过javascript执行).类似的东西(这只是一个想到的例子 - 还有很多其他可能的格式):
comparisons = (('a', '>', 'b'), ('b', '==', 'c'))
Run Code Online (Sandbox Code Playgroud)
稍后将在Javascript中进行评估.
上下文是我正在研究一个Django应用程序(最终作为插件分发),这将要求用户以我选择的任何语法编写比较(因此有关使其成为pythonic的问题).比较将引用表单字段,并最终将转换为javascript条件表单显示.我想一个例子是有序的:
class MyModel(models.Model):
yes_or_no = models.SomeField...choices are yes or no...
why = models.SomeField...text, but only relevant if yes_or_no == yes...
elaborate_even_more = models.SomeField...more text, just here so we can have multiple conditions
#here i am inventing some syntax...open to suggestions!!
why.show_if = ('yes_or_no','==','yes')
elaborate_even_more.show_if = (('yes_or_no','==','yes'),('why','is not','None'))
#(EDIT - help me choose a syntax that is …Run Code Online (Sandbox Code Playgroud) 如此问题中所述:如何在pylint-1.0.0之后显示Pylint消息ID?
pylint 1.0.0不再接受"include-ids"选项.(它返回"lint.py:error:没有这样的选项: - include-ids").不幸的是,在与PyDev/Eclipse的集成中,有一个小块:"--include-ids = y总是包含......".
如何禁用该参数以便Pylint可以与Eclipse一起使用?
[我知道,其他选择包括安装较旧版本的Pylint或在没有该选项的情况下从命令行运行pylint(这确实有效),但我希望与Eclipse集成.
我正在尝试用我的数据库做各种事情.我已连接并将数据输出和输出成功,没有问题.我一直在调试其他问题,然后我突然无法从我的数据库表中得到任何东西 - 我得到"OperationalError:no such table:article".
我真的很难过 - 这工作得很好,我正在查询数据库没有问题,插入数据等等.然后我突然得到这个错误.我在错误开始出现之前做出的更改似乎完全不相关 - 我解除了它们并仍然得到了这个错误.这是我的脚本的开始,我收到错误:
import sqlite3
database='mydatabase'
db=sqlite3.connect(database)
c=db.cursor()
sql_command='SELECT id FROM article'
idlist=c.execute(sql_command)
Run Code Online (Sandbox Code Playgroud)
我可以在SQLite Administrator中打开该数据库并验证该表是否存在.此外它还在工作.我还试图通过以下方式验证表格在哪里:
>>c.execute('select name from sqlite_master where type="table"').fetchall()
[]
Run Code Online (Sandbox Code Playgroud)
所以有些事情真的很古怪.
我也试过关闭并重新打开数据库连接和游标.并关闭Python会话.没有骰子.救命!
使用2个样本Kolmogorov Smirnov检验,我的p值为0.0.
>>>scipy.stats.ks_2samp(dataset1, dataset2)
(0.65296076312083573, 0.0)
Run Code Online (Sandbox Code Playgroud)
查看2个数据集的直方图,我非常有信心它们代表两个不同的数据集.但是,真的,p = 0.0?这似乎没有意义.它不应该是一个非常小但正数吗?
我知道返回值是numpy.float64类型.这与它有关吗?
编辑:数据:https://www.dropbox.com/s/jpixhz0pcybyh1t/data4stack.csv
scipy.version.full_version
'0.13.2'
Run Code Online (Sandbox Code Playgroud) 我在 Django 测试中看到了一些非常令人惊讶和令人沮丧的行为。相关查找正在“找到”模型对象,但不存在模型对象。(我对这里奇怪的描述表示歉意……这种行为太奇怪了,我不知道如何描述它。这些物体存在吗?我存在吗?你存在吗??)
我需要它们存在,所以我有一个方法可以在它们不存在时创建它们。问题是,在一行中,Django 发现它们确实存在,因此它们没有被创建......然后在下一行我们可以确认不存在这样的对象。
我的测试在 test_something() 中给出了与缺少必要的 TaskMetadata 对象相关的错误。
#the model
class TaskMetadata(models.Model):
task = models.OneToOneField(ContentType)
...
#the test
class SimpleTest(TestCase):
def setUp(self):
some_utility_function()
def test_something(self):
...something that requires TaskMetadata...
def some_utility_function():
task = ...whatever...
ctype = ContentType.objects.get_for_model(task)
try:
ctype.taskmetadata
except TaskMetadata.DoesNotExist:
...create TaskMetadata...
print "Created TaskMetadata object for %s" % task.__name__
else:
print "TaskMetadata object already exists for %s" % task.__name__
print ctype.taskmetadata
print "ALL OF THEM!! %s" % TaskMetadata.objects.all()
Run Code Online (Sandbox Code Playgroud)
以及 some_utility_function() 的打印结果:
TaskMetadata object already exists for …Run Code Online (Sandbox Code Playgroud) 我正在尝试在脚本中访问NCBI图像搜索页面(http://www.ncbi.nlm.nih.gov/images)上的搜索结果.我想提供一个搜索字词,报告所有结果,然后转到下一个搜索字词.要做到这一点,我需要在第一页之后到达结果页面,所以我试图使用python mechanize来做到这一点:
import mechanize
browser=mechanize.Browser()
page1=browser.open('http://www.ncbi.nlm.nih.gov/images?term=drug')
a=browser.links(text_regex='Next')
nextlink=a.next()
page2=browser.follow_link(nextlink)
Run Code Online (Sandbox Code Playgroud)
这只是让我回到搜索结果的第一页(在变量page2中).我做错了什么,如何进入第二页及以后?
我正在研究一些连接到sqlite数据库的代码.在调试所述代码的过程中,我遇到的问题是我挂起了与数据库的连接,因为某些错误阻止了执行close命令.因为db和c是在函数中定义的,所以我无法从命令行中找到并关闭这些对象.他们就像孤儿连接或什么的,但在任何情况下,他们阻止我做任何事情都要与数据库中,直到我关闭并重新打开我的交互式控制台.这是它的样子:
def something()
db=sqlite3.connect('mydatabase')
c=db.cursor()
somecode
lots of different things happening in here
this may have errors
thus stopping execution
db.commit()
c.close()
db.close()
Run Code Online (Sandbox Code Playgroud)
我尝试了一个try/except子句,最后关闭操作在"finally"块中,但这可以防止异常在我调试时被提升回交互式输出,并且事情"无声地"失败(也许我不是做那个部分吧?)有一个更好的方法吗?
我在Django中为模型管理器提供了两种自定义方法.其中一个有效.我最近添加了另一个和Django(和python)的行为,就像它不存在一样.这是模型的相关部分:
class FigureServerManager(models.Manager):
#This method takes as input a user and grabs a figure that is not marked complete for which that user has not already submitted a result
def serve_to_user(self,user):
not_complete=super(FigureServerManager, self).get_query_set().filter(complete=0)
for Figure in not_complete:
checkifresult=User.objects.get(pk=user).result_set.all().filter(figure=Figure.id)
if not checkifresult:
return Figure
#This is a copy of the above method that I want to change to do something else, but I can't even get it to show up yet
def serve_training_task(self, user):
with_correct_ans=super(FigureServerManager, self).get_query_set().filter(complete=0)
for Figure in with_correct_ans:
checkifresult=User.objects.get(pk=user).result_set.all().filter(figure=Figure.id) …Run Code Online (Sandbox Code Playgroud) python ×10
django ×4
sqlite ×2
built-in ×1
caching ×1
deployment ×1
eclipse ×1
exception ×1
hyperlink ×1
javascript ×1
jquery ×1
mechanize ×1
methods ×1
object ×1
private ×1
public ×1
pydev ×1
pylint ×1
scipy ×1
statistics ×1
templates ×1
transactions ×1
try-catch ×1
try-except ×1
unit-testing ×1