相关疑难解决方法(0)

Python迭代器中的hasNext?

有没有Python迭代器得到一个hasNext方法?

python iterator

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

尝试Catch或If语句?

如果你认为有可能获得空指针异常,你应该使用if语句来确保变量不为null,还是应该捕获异常?

我没有看到任何区别,因为你可以把你的逻辑处理if语句或catch块中的空指针,那么哪一个是最好的做法?

.net c# exception-handling

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

Python例外:EAFP和什么是真正的例外?

在一些地方(这里这里)已经说过,Python强调"请求宽恕而不是许可"(EAFP)应该通过以下观点来缓和,即异常只应在真正特殊情况下调用.考虑以下内容,我们将弹出并推送优先级队列,直到只剩下一个元素:

import heapq
...
pq = a_list[:]
heapq.heapify(pq)
while True:
    min1 = heapq.heappop(pq)
    try:
        min2 = heapq.heappop(pq)
    except IndexError:
        break
    else
        heapq.heappush(pq, min1 + min2)
# do something with min1
Run Code Online (Sandbox Code Playgroud)

异常仅在len(a_list)循环的迭代中引发一次,但它并不是特别的,因为我们知道它最终会发生.这个设置使我们a_list无需检查是否空了很多次,但(可能)它比使用显式条件更不易读.

对这种非特殊程序逻辑使用异常的共识是什么?

python exception

15
推荐指数
3
解决办法
2302
查看次数

捕获NumberFormatException是一种不好的做法吗?

我必须解析一个可以采用十六进制值或其他非十六进制值的字符串

0xff,0x31或者A,PC,label,等等.

我使用此代码来划分两种情况:

String input = readInput();

try {
    int hex = Integer.decode(input);            
    // use hex ...

} catch (NumberFormatException e) {
   // input is not a hex, continue parsing
}
Run Code Online (Sandbox Code Playgroud)

这段代码可以被视为"丑陋"还是难以阅读?还有其他(可能更优雅)的解决方案吗?

编辑:我想澄清(在我的情况下)错误的输入不存在:我只需要区分它是否是十六进制数.而且为了完整起见,我正在为DCPU-16制作一个简单的装配器.

java parsing exception-handling exception numberformatexception

10
推荐指数
1
解决办法
1872
查看次数

在catch块中编写业务逻辑

我试图了解使用Java catch块的正确方法。我应该在那里写业务逻辑还是仅抑制错误?

我的问题在某种程度上与有关。请检查一下。

我的理解:

如果未检查到 异常,则最好的方法是用以下方式编写代码:

Integer n = null;
try {
    n = Integer.parseInt(reader.readLine());
}
catch(NumberFormatException e){
    log.error('Can't parse string');
}
if (n == null) {
    n = 0;
}
Run Code Online (Sandbox Code Playgroud)

并避免这样的代码:

Integer n = null;
try {
    n = Integer.parseInt(reader.readLine());
}
catch(NumberFormatException ignored){
    n = 0;
}
Run Code Online (Sandbox Code Playgroud)

我的问题:

但是它将被检查的异常是什么,并且我在未找到搜索元素的情况下使用例如数据库异常抛出NoSuchElement异常:

User user = null;

try {
    user = User.findById(userId);
} catch (NoSuchCategoryException e) {
    log.error('User {} doesn't exist.', userId);
    user = new User();
}
user.setUsername('someName'); …
Run Code Online (Sandbox Code Playgroud)

java

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

Spring Boot + JPA + 异常处理

我正在研究将我们的项目转换为 Spring Boot 应用程序的概念验证。我有一个具有两种方法的存储库类:保存和查找。

@Repository
public class UserDataRepo {
    private EntityManager em;

    public boolean save(UserDataModel model) {
        try {
            UserDataModel existingModel = find(model.getTable(), model.getFieldName();
            model.setId(existingModel.getId());
            this.em.merge(model);
            this.em.flush();
            return false;
        } catch (NoResultException e) {
            this.em.persist(model);
            this.em.flush();
            return true;
        }
    }

    public UserDataModel find(String table, String field) {
        Query query = this.em.createQuery(FIND_USERDATA_STATEMENT);
        query.setParameter("table", table);
        query.setParameter("fieldName", field);
        return (UserDataModel) query.getSingleResult(); // throws NoResultException
    } 
}
Run Code Online (Sandbox Code Playgroud)

在我的 Spring Boot 应用程序类中,我添加了@EnableJpaRepositories, @EnableTransactionManagement。我的应用程序启动正常,没有任何错误。但正如你所看到的,save方法依赖于find方法来确定是合并还是持久。如果没有记录,find 方法将抛出 NoResultException。我观察到它永远不会落入 save 方法的 catch 块内。Spring Boot 只是抛出一个错误,指出 NoResultException。 …

java spring hibernate jpa spring-boot

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