小编gor*_*sky的帖子

Python中的SyntaxError不一致?

考虑这两个片段:

try:
    a+a=a
except SyntaxError:
    print "first exception caught"
Run Code Online (Sandbox Code Playgroud)

.

try:
    eval("a+a=a")
except SyntaxError:
    print "second exception caught"
Run Code Online (Sandbox Code Playgroud)

在第二种情况下,打印"第二个异常.."语句(异常捕获),而在第一个异常捕获时则不是.

第一个异常(让我们称之为"SyntaxError1")与第二个异常("SyntaxError2")?

有没有办法捕获SyntaxError1(从而抑制编译时错误)?包装大块代码eval是不能令人满意的;)

python exception

15
推荐指数
1
解决办法
1451
查看次数

应用IO是否基于Monad IO的功能实现?

在"为了好大学而学习你的哈斯克尔!" 作者声称Applicative IO实例是这样实现的:

instance Applicative IO where
    pure = return
    a <*> b = do
        f <- a
        x <- b
        return (f x)
Run Code Online (Sandbox Code Playgroud)

我可能是错的,但似乎都returndo特异性结构(一些加糖的结合(>>=))来自Monad IO.假设这是正确的,我的实际问题是:

为什么Applicative IO实现依赖于Monad IO函数/组合器?

是不是没有Applicative 那么强大的概念Monad


编辑(一些澄清):

这种实现违背了我的直觉,因为根据Typeclassopedia的文章,在给定类型Applicative 之前需要Monad(或者它应该在理论上).

monads haskell applicative

10
推荐指数
3
解决办法
1479
查看次数

在中间件中动态更改SITE_ID被认为是个好主意吗?

(这不是"基于对多个站点的请求动态更改Django设置变量"的重复,因为之前的问题包括在运行时进行更严肃的重新配置)

sites.Site用来将内容绑定到我的项目中的域/主机(通过外键).选择适当的Site基于request.META['HTTP_HOST']我的自定义中间件.

但是,我知道sites框架的这种使用并不完全是Canonical Way(我有一个应用程序实例为不同的域提供不同的数据,而sites- AFAIK - 设计用于多个实例,每个域一个).

困扰我的元素是settings.SITE_ID- 静态设置,将当前的应用程序实例与一个Site(域)联系起来.这在几个地方使用,即contrib.auth(在密码重置电子邮件中组成完整的绝对URL).因此,SITE_ID基于动态改变会很酷request.META['HTTP_HOST'].

所以我的问题是:

动态地改变SITE_ID(即在中间件中)被认为是个好主意?

文档声明在运行时更改设置通常是坏主意(这里),但在这种情况下(在中间件调用足够早的时候)也许这样做很好.

(编辑):

它在本地工作(Django测试客户端),但我正在考虑具有多个线程和/或进程的生产环境中的并发请求.

django settings middleware django-middleware django-settings

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

自动上传和解压档案(zip,rar,targz,tarbz) - 安全问题?

我想为基于Web的应用程序创建以下功能:

  1. 用户上传档案文件(zip/rar/tar.gz/tar.bz等)(内容 - 多个图像文件)
  2. 上传后会自动提取存档
  3. 图像显示在HTML列表中(无论如何)

提取过程是否涉及任何安全问题?例如,上传文件(或准备好的档案文件)中包含恶意代码执行的可能性,或者?

security upload archive

5
推荐指数
1
解决办法
1382
查看次数

在Django中提供Rails-way i18n支持的好方法

在(新)Rails中有一件事我羡慕:国际化支持(Django也有一个,但我更喜欢Rails的味道).

Rails'和Django的方法之间的关键区别在于什么类型的字符串在键值转换映射中表现得像键,即

Django版本(键 - "主要"语言的字符串,例如英语):

msgid "Save and quit"
msgstr "Zapisz i wyjd?"
Run Code Online (Sandbox Code Playgroud)

Rails版本等价(键 - 抽象字符串;独立不可用 - 需要提供至少1个"翻译") - 实际上,Rails使用YAML格式,但下面的示例提出了这个想法:

// english translation file

msgid "SAVE_QUIT_MESSAGE"
msgstr "Save and quit"
Run Code Online (Sandbox Code Playgroud)

// polish translation file

msgid "SAVE_QUIT_MESSAGE"
msgstr "Zapisz i wyjd?"
Run Code Online (Sandbox Code Playgroud)

Rails支持i18n的方式是恕我直言更好(想想关键不变性 - 抗语法/拼写纠正;语言不可知论等).

在Django中使用这种模式的一种方法是使用一些抽象语言,仅用于翻译(该语言中的字符串将生成不可变密钥),但Django仅支持固定的语言集.另一个解决方案 - 牺牲一种支持的(未使用的)语言来扮演这个角色 - 但这很糟糕:P

任何想法/第三方应用程序/技术来解决这个问题?


旁注:扩展i18n对artibrary语言的支持会带来有趣的机会:

// slang translation file

msgid "SAVE_QUIT_MESSAGE"
msgstr "Save shit 'n' quit, bro"
Run Code Online (Sandbox Code Playgroud)

django internationalization

5
推荐指数
1
解决办法
523
查看次数

with statement - 用于Python 2.5的backport

我想with在一些生产代码中使用Python 2.5中的语句.如果我发现任何问题(例如其他机器上的可用性/兼容性等),它是向后移植的吗?

这是代码

from __future__ import with_statement
Run Code Online (Sandbox Code Playgroud)

兼容Python 2.6?

python backport with-statement

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