我不是要求对这种哲学提出个人的"宗教"观点,而是要更具技术性.
我理解这句话是几个试金石中的一个,看你的代码是否是"pythonic".但对我来说,pythonic意味着干净,简单和直观,没有加载异常处理程序以进行错误的编码.
所以,实际的例子.我定义了一个类:
class foo(object):
bar = None
def __init__(self):
# a million lines of code
self.bar = "Spike is my favorite vampire."
# a million more lines of code
Run Code Online (Sandbox Code Playgroud)
现在,来自程序背景,在另一个函数中,我想这样做:
if foo.bar:
# do stuff
Run Code Online (Sandbox Code Playgroud)
如果我不耐烦并且没有做初始的foo = None,我会得到一个属性异常.所以,"请求宽恕不许可"表明我应该这样做吗?
try:
if foo.bar:
# do stuff
except:
# this runs because my other code was sloppy?
Run Code Online (Sandbox Code Playgroud)
为什么我在try块中添加额外的逻辑会更好,这样我可以让我的类定义更加模糊?为什么不先定义所有内容,然后明确授予权限?
(不要打扰我使用try/except块......我在任何地方都使用它们.我不认为用它们来捕捉我自己的错误是正确的,因为我不是一个彻底的程序员.)
或者......我是否完全误解了"请求原谅"的口头禅?
我们有一个包含20多个模块的Python应用程序,其中大多数模块由多个Web和控制台应用程序共享.
我从未清楚地了解在多模块Python应用程序中建立和管理数据库连接的最佳实践.考虑这个例子:
我有一个模块为Users定义一个对象类.它有许多defs用于在数据库中创建/删除/更新用户.users.py模块被导入到a)基于控制台的实用程序,2)基于web.py的Web应用程序和3)持续运行的守护进程.
这三种应用中的每一种都有不同的生命周期.守护程序可以打开连接并保持打开状态.控制台实用程序连接,工作,然后死亡.当然,http请求是原子的,但Web服务器是守护进程.
我正在打开,然后关闭Users类中每个函数内部的连接.这似乎效率最低,但它适用于所有示例.用作测试的替代方法是声明并打开整个模块的全局连接.另一个选择是在顶层应用程序层创建连接并在实例化类时传递引用,但这对我来说似乎是最糟糕的想法.
我知道每个应用程序架构都不同.我只是想知道是否有最好的做法,它会是什么?
这个让我大吃一惊.鉴于以下字典:
d = {"a":{"b":{"c":"winning!"}}}
Run Code Online (Sandbox Code Playgroud)
我有这个字符串(来自外部来源,我不能改变这个比喻).
k = "a.b.c"
Run Code Online (Sandbox Code Playgroud)
我需要确定字典是否有密钥 'c',所以如果没有,我可以添加它.
这可以游戏地检索点符号值:
reduce(dict.get, key.split("."), d)
Run Code Online (Sandbox Code Playgroud)
但我无法弄清楚如何'减少'has_key检查或类似的东西.
我的最终问题是:给定"abcde",我需要创建字典中所需的所有元素,但如果它们已经存在则不要踩它们.如果有人知道做出这一切的真正方式,那么你将成为我的英雄.
我一直无处可去但试图理解这些工具的"独立性"之间的奇怪关系.
我已经在OSX上使用Aptana Studio大约4年了,并对它感到满意,但是我最近对3.6的更新爆炸了很多东西我最终回滚到3.4只是为了让我能够工作.
无论好坏,我确实喜欢Aptana,但我并不喜欢它,现在我对最新版本感到非常沮丧,特别是所有的python东西都变得混乱了.寻求帮助是痛苦的,因为线程和建议已经很多年了.
所以,问题的方式:
我需要/想要的是:
就像我说的那样,我确实喜欢Aptana,对当前社区明显缺乏以及它似乎如何分崩离析感到沮丧.
这个是杀了我.我们在MySQL数据库上有一个ASP.NET/Mono应用程序.几个月来,我们一直被"无法连接到任何指定的MySQL主机"的完全随机但一致的事件所困扰.我绝不是MySQL专家,我希望这是愚蠢的.
细节:
MySQL 5.5.17
MySQL Connector/Net 6.4.4
Mono 2.10.8
MonoDevelop 2.8.6.5
连接字符串:SERVER = localhost,3306; DATABASE = xxx; UID = xxx; PWD = xxx; CONNECTION TIMEOUT = 90; Encrypt = false;
Max_connections设置为150.永远不会超过5个连接,并且它们都是活动的(可能是由于池).
该应用程序是C#ASP.NET 3.5.在Windows/IIS上运行多年坚如磐石.九个月前,我们的市场导致我们离开了Windows,因此我们(很容易就可以添加)将整个事情转移到Mono/Apache.
这个问题只出现在Mono方面,但这一点至关重要,因为我们已经退出了Windows支持.
平均每小时发生约10次,但间距变化很大.
该问题已在以下配置中见证:
Ubuntu 11/Apache2/mod_mono
OSX Lion/Apacke2/mod_mono
Ubuntu 11/xsp2/MonoDevelop调试服务器
OSX Lion/xsp2/MonoDevelop调试服务器
搞乱了keepalive,wait_timeout,connectionreset等无济于事.时间似乎没有效果.conn.open上的错误是瞬时的 - 不是在任何连接超时之后.
这是一个线索 - 应用程序绝对不会运行Pooling = false.几乎每个连接尝试都失败了.当然我想要合并,但我不确定为什么没有它就行不通.
该应用程序内置"心跳"(用户在数据库中的会话) - 每2分钟一次.
最令人抓狂的是什么?绝对不能在运行环境中按需复制 - 它是随机的.我检查了查询大小,执行时间等.
在一个场景中我可以实现它:在Ubuntu服务器或OSX的初始启动时,Mono第一次使它成为第一次连接MySQL - 它将会发生.在那之后,这是任何人的猜测.
这个只是足够钝,没有典型的答案冒泡到顶部.
我正在使用的工具的性质决定了我们使用MongoDB来存储大约25种不同工具的"设置".每个工具都有自己的设置模式,因此每个文档都不同,但它们都存储在同一个集合中,并在json模式绘制的同一编辑页面上进行编辑.
我不知道字典的架构,我正在努力弄清楚如何迭代和消毒数据,特别是删除密码.
鉴于以下字典,并且知道其他dicts可能有不同的模式,我怎样才能遍历dict中的每个项目并创建一个副本,除了删除了任何密钥=="密码"之外?
所以:
{
"_enabled": true,
"instances": [
{
"isdefault": true,
"name": "dev",
"password": "abc123",
"url": "http://dev.example.com",
"user": "buffy"
},
{
"isdefault": false,
"name": "prod",
"password": "xxxxx",
"url": "http://prod.example.com",
"user": "spike"
},
{
"isdefault": false,
"name": "qa",
"password": "dasddf",
"url": "http://prod.example.com",
"user": "willow"
}
],
"label": "MyServers"
}
Run Code Online (Sandbox Code Playgroud)
应该导致:
{
"_enabled": true,
"instances": [
{
"isdefault": true,
"name": "dev",
"url": "http://dev.example.com",
"user": "buffy"
},
{
"isdefault": false,
"name": "prod",
"url": "http://prod.example.com",
"user": "spike"
},
{
"isdefault": …Run Code Online (Sandbox Code Playgroud) 我喜欢python one liners:
u = payload.get("actor", {}).get("username", "")
Run Code Online (Sandbox Code Playgroud)
我面临的问题是,我无法控制"有效载荷"包含的内容,除了知道它是一本字典.所以,如果'有效载荷'没有"演员",或者它确实和演员有或没有"用户名",这个单行是好的.
当有效载荷有演员时,问题当然会出现,但演员不是字典.
有没有一种方法可以全面地做到这一点作为一个班轮,并考虑'演员'可能不是字典的可能性?
当然我可以使用'isinstance'检查类型,但那并不好.
我本身并不需要一个班轮,只是要求最有效的方法来确保'你'被填充,毫无例外,并且事先不知道'有效载荷'究竟是什么.
我需要通过自动化在git远程上创建一个新的分支,但是我需要这样做而不需要首先获得可能很大的repos的本地副本.
除非我遗漏了某些东西(显而易见或微妙),否则我找到的每个例子都假定我想在本地"获取","克隆"或"检出"回购,然后创建分支,然后推送到原点.
这不是我想要做的.我需要,从一个在ubuntu服务器上运行的脚本,我无法负担克隆repos的开销,只需向远程添加一个分支,这样其他人就可以拉下该分支并开始工作.
用例是,我正在使用自动化框架,我们通过在开发人员开始工作之前创建功能分支来实施最佳实践.
使用GitHub或GitLab可以通过API轻松实现.在某些情况下,我的客户只是使用'git',我必须使用命令行和脚本执行此操作.
我知道这可能含糊不清,如果问题不明确,请告诉我.
我知道 GitLab 和 Jenkins 都有彼此的集成点,但是由于我无法控制的原因,我无法使用它们。
很容易将参数传递给作业,告诉它哪个分支,甚至哪个提交要构建。但是,我似乎无法将其调整为正确的配置,它将构建我作为参数传入的合并请求编号。
我需要使用 Jenkins 中开箱即用的“git”功能来做到这一点。(不能使用 GitLab Merge Request 插件,因为它需要对 repo 进行轮询。)此作业必须手动启动,并通过参数指定合并请求编号。我也不会使用 GitLab 的 webhook 来触发它。此要求是特定合并请求的手动和按需构建。
有可能吗,我只是遗漏了一些(不)明显的东西?
python ×5
dictionary ×2
mysql ×2
aptana ×1
asp.net-3.5 ×1
bash ×1
defaultdict ×1
eclipse ×1
git ×1
gitlab ×1
jenkins ×1
macos ×1
mono ×1
nested ×1
pydev ×1