小编Jua*_*ano的帖子

在Python中使用try-except-else是一个好习惯吗?

在Python中,我不时会看到块:

try:
   try_this(whatever)
except SomeException as exception:
   #Handle exception
else:
   return something
Run Code Online (Sandbox Code Playgroud)

try-except-else存在的原因是什么?

我不喜欢那种编程,因为它使用异常来执行流控制.但是,如果它包含在语言中,那么必须有充分的理由,不是吗?

我的理解是,异常不是错误,它们只应用于特殊情况(例如我尝试将文件写入磁盘,没有更多空间,或者我没有权限),而不是流程控制.

通常我将异常处理为:

something = some_default_value
try:
    something = try_this(whatever)
except SomeException as exception:
    #Handle exception
finally:
    return something
Run Code Online (Sandbox Code Playgroud)

或者如果我真的不想在发生异常时返回任何内容,那么:

try:
    something = try_this(whatever)
    return something
except SomeException as exception:
    #Handle exception
Run Code Online (Sandbox Code Playgroud)

python exception-handling exception try-catch

400
推荐指数
8
解决办法
22万
查看次数

基于输入参数模拟python函数

我们一直在使用Mock for python.

现在,我们有一种情况,我们想要模拟一个函数

def foo(self, my_param):
    #do something here, assign something to my_result
    return my_result
Run Code Online (Sandbox Code Playgroud)

通常,模拟这个的方法是(假设foo是对象的一部分)

self.foo = MagicMock(return_value="mocked!")
Run Code Online (Sandbox Code Playgroud)

甚至,如果我打电话给foo()几次我可以使用

self.foo = MagicMock(side_effect=["mocked once", "mocked twice!"])
Run Code Online (Sandbox Code Playgroud)

现在,我面临的情况是,当输入参数具有特定值时,我想返回固定值.所以如果让我们说"my_param"等于"某事"那么我想要返回"my_cool_mock"

这似乎可以在mock上用于python

when(dummy).foo("something").thenReturn("my_cool_mock")
Run Code Online (Sandbox Code Playgroud)

我一直在寻找如何与Mock达成同样的目标并没有成功?

有任何想法吗?

python unit-testing mocking mockito

126
推荐指数
7
解决办法
7万
查看次数

服务和外观的角色是否相似?

我读的越多,我就越困惑.

请注意,所有问题都与服务和外观如何适应MVC模式有关.

我的理解是Facade不是一个超级智能对象,它只是一种暴露简单接口/ api来执行复杂操作的方式(例如:执行10 $付款,这是一个复杂的操作,涉及一些操作,但这样的复杂性可以通过一个外观来处理,它只会按特定的顺序调用相应的对象......等等...)

现在,服务是一种执行对几个DAO的调用以获得复杂数据结构的方法(我对此不太确定,但这是我目前所理解的).

那么问题是,外观和服务之间有什么区别?在一天结束时,外观可以完美地访问几个DAO,以便通过提供简单的界面来执行复杂的操作,并且服务似乎类似于某些东西.

交易也是如此,我知道服务是开始交易的地方,但我同样觉得它们也可以放在外墙上,毕竟外立面也可以调用几个DAO.

那么哪个堆栈会更有意义

controller-facade-dao controller-service-dao

或者可能

controller-facadade-dao有时候是controller-facade-service-dao ??

java model-view-controller spring design-patterns facade

49
推荐指数
3
解决办法
3万
查看次数

获取两个2D numpy数组的相交行

我想在两个2D numpy数组中获得相交(公共)行.例如,如果以下数组作为输入传递:

array([[1, 4],
       [2, 5],
       [3, 6]])

array([[1, 4],
       [3, 6],
       [7, 8]])
Run Code Online (Sandbox Code Playgroud)

输出应该是:

array([[1, 4],
       [3, 6])
Run Code Online (Sandbox Code Playgroud)

我知道如何用循环来做这件事.我正在寻找一种Pythonic/Numpy方式来做到这一点.

python numpy

33
推荐指数
5
解决办法
2万
查看次数

使用弹簧刻板印象的优点?

我正在使用spring-mvc开发一个Web应用程序.

现在可以使用@ Controller,@ Service和@Repository构造型.

我发现@Controller特别有用,特别是因为我正在使用

<context:component-scan base-package="my.cool.controller"/>
Run Code Online (Sandbox Code Playgroud)

现在,关于@Service和@Repository,到目前为止看起来像

  1. 如果使用正确的构造型注释类,则可以更好地处理异常,确定,这是我承认的优势
  2. 我可以使用组件扫描服务和DAO /存储库,但是我不喜欢使用组件扫描的想法,因为它减慢了应用程序的启动时间,这对我来说是一个关键特性(即使它只是1秒,我每周重新部署一次)

那么,除了更好的例外,还有其他任何优势吗?注释类是否会影响性能?

java spring annotations spring-mvc

25
推荐指数
1
解决办法
2万
查看次数

ElementTree iterparse策略

我必须处理足够大的xml文档(高达1GB)并使用python解析它们.我正在使用iterparse()函数(SAX样式解析).

我关注的是,假设你有一个这样的xml

<?xml version="1.0" encoding="UTF-8" ?>
<families>
  <family>
    <name>Simpson</name>
    <members>
        <name>Homer</name>
        <name>Marge</name>
        <name>Bart</name>
    </members>
  </family>
  <family>
    <name>Griffin</name>
    <members>
        <name>Peter</name>
        <name>Brian</name>
        <name>Meg</name>
    </members>
  </family>
</families>
Run Code Online (Sandbox Code Playgroud)

问题是,当然知道我什么时候得到一个姓氏(如辛普森一家),当我得到一个家庭成员的名字时(例如荷马)

到目前为止我一直在做的是使用"开关",告诉我是否在"成员"标签内,代码看起来像这样

import xml.etree.cElementTree as ET

__author__ = 'moriano'

file_path = "test.xml"
context = ET.iterparse(file_path, events=("start", "end"))

# turn it into an iterator
context = iter(context)
on_members_tag = False
for event, elem in context:
    tag = elem.tag
    value = elem.text
    if value :
        value = value.encode('utf-8').strip()

    if event == 'start' :
        if tag == …
Run Code Online (Sandbox Code Playgroud)

python xml sax elementtree iterparse

23
推荐指数
2
解决办法
2万
查看次数

在单元测试中使用经过的时间作为断言

我正面临一种情况,我想确保如果一个方法被修改,它运行不需要超过X毫秒(基本上如果该功能较慢,它将减慢我们网页上的搜索结果,并且对销售产生不良影响).

我们有单元测试(特别是代码是在python下完成的,我们使用py.test),第一个想法是断言如果函数没有在小于X ms内执行,那么将测试标记为失败(或者提升一个警告).

然而,这感觉很危险(例如,并非所有计算机都具有相同的速度),而且我也不确定这是单元测试的工作.

有人遇到过类似的情况吗?对我而言,速度是一项功能,我希望确保随着代码的发展,此功能在将来不会丢失.

如果单元测试不是答案,您会推荐哪些其他替代方案?

谢谢

python unit-testing pytest

17
推荐指数
1
解决办法
1574
查看次数

应该在哪个层进行验证?

我正在写一个网络服务.

通常,输入将是XML文档和输出XML或JSON.

该应用程序使用具有不同层的MVC模式

  • 控制器:接收XML并提供响应(XML/JSON)
  • 服务:业务逻辑,交易
  • DAO:查询数据源(数据库或其他Web服务)

我的理解是应该在Controller层上尽快完成基本验证(即:针对XSD的XML).

之后,我仍然需要执行额外的验证,例如,一些此类验证是基本的

  • 日期格式必须正确
  • 用户名不能超过X个字符(也可能在XSD上执行?)

据我所知,在将XML解组为Java对象时,应该进行这样的基本验证.这也会发生在控制器层中(尽管验证本身将由解组XML的Java对象完成)

最后,我面对更复杂的验证示例

  • 日期不应该在1950年之前(只是一个随机的例子)
  • 如果值A大于B,则值C不应超过D.

这种"复杂"的值似乎是javax.validation.Validator接口的完美候选者.并且感觉它们应该在Controller层中完成.

问题是

  1. 这种方法是否正确?我还应该在其他层验证一些东西吗?
  2. 我是否在控制器中添加了太多逻辑?我是否应该将一些验证移到业务逻辑所在的服务层?

java validation model-view-controller web-services

12
推荐指数
1
解决办法
3401
查看次数

什么是最好的表单元素样式库/插件(jQuery)?

在该项目中,我此刻的表单元素(如工作<input>,<select>,<textarea>等)必须有非标"看正感觉".

您可以为此推荐哪个库或插件(jQuery)?

我搜索了一些可用的库,但没有找到适合我需求的库.所有人都有'真实' - '假'元素的想法,他们.该项目有很多表单元素即时创建并注入DOM.

主要要求是:

  • 即时创建'假'元素.
  • 能够为一个节点或CSS选择器(而不是整个页面)应用样式.
  • 虚假和真实元素之间的非侵入事件传播.(假元素应该响应真实元素的变化,并将发生的事件发送到相应的真实元素,如模糊,焦点,变化,点击.图书馆应该关注事件传播,而不是代码)
  • 它应该与IE7及更高版本兼容.
  • 应该有良好的文档和灵活的公共API

我正在努力使用一个库,几乎"适应"它的要求,但它缺乏文档,许可证不清楚我是否可以修改它.

非常感谢你的帮助!

亲切的问候.

javascript css forms jquery styles

9
推荐指数
2
解决办法
9318
查看次数

Java垃圾收集器和内存的问题

我对Java应用程序有一个非常奇怪的问题.

基本上它是一个使用玉兰(一个cms系统)的网页,在生产环境中有4个实例可用.有时CPU在java进程中达到100%.

所以,第一种方法是进行线程转储,并检查有问题的线程,我发现的是奇怪的:

"GC task thread#0 (ParallelGC)" prio=10 tid=0x000000000ce37800 nid=0x7dcb runnable 
"GC task thread#1 (ParallelGC)" prio=10 tid=0x000000000ce39000 nid=0x7dcc runnable 
Run Code Online (Sandbox Code Playgroud)

好吧,这很奇怪,我从来没有像这样的垃圾收集器,所以接下来我们做的是激活JMX并使用jvisualvm检查机器:堆内存使用率非常高(95%).

天真的方法:增加内存,所以问题需要更多的时间才能在重新启动的服务器上出现,结果,内存增加(6 GB!)问题出现在重新启动后20小时,而其他服务器上的内存较少(4GB!)运行了10天,这个问题还需要几天才能重新出现.此外,我尝试使用服务器失败的apache访问日志,并使用JMeter将请求重播到本地服务器,以尝试重现错误...它也不起作用.

然后我更多地调查了日志以找到这个错误

info.magnolia.module.data.importer.ImportException: Error while importing with handler [brightcoveplaylist]:GC overhead limit exceeded
at info.magnolia.module.data.importer.ImportHandler.execute(ImportHandler.java:464)
at info.magnolia.module.data.commands.ImportCommand.execute(ImportCommand.java:83)
at info.magnolia.commands.MgnlCommand.executePooledOrSynchronized(MgnlCommand.java:174)
at info.magnolia.commands.MgnlCommand.execute(MgnlCommand.java:161)
at info.magnolia.module.scheduler.CommandJob.execute(CommandJob.java:91)
at org.quartz.core.JobRunShell.run(JobRunShell.java:216)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:549)
    Caused by: java.lang.OutOfMemoryError: GC overhead limit exceeded
Run Code Online (Sandbox Code Playgroud)

另一个例子

    Caused by: java.lang.OutOfMemoryError: GC overhead limit exceeded
    at java.util.Arrays.copyOf(Arrays.java:2894)
    at java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:117)
    at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:407)
    at java.lang.StringBuilder.append(StringBuilder.java:136)
    at java.lang.StackTraceElement.toString(StackTraceElement.java:175)
    at java.lang.String.valueOf(String.java:2838)
    at java.lang.StringBuilder.append(StringBuilder.java:132)
    at java.lang.Throwable.printStackTrace(Throwable.java:529)
    at org.apache.log4j.DefaultThrowableRenderer.render(DefaultThrowableRenderer.java:60) …
Run Code Online (Sandbox Code Playgroud)

java memory garbage-collection magnolia

9
推荐指数
1
解决办法
5082
查看次数