小编zbs*_*zbs的帖子

异常执行两次,它被另一个不同的块捕获

我有以下代码:

file1.py

from file2 import tfun

class TestException(Exception):
    pass

try:
    print 'I am running'
    tfun()
except TestException as e:
    print 'I am caught'
    print type(e)
except Exception as e:
    print 'I am generally caught'
    print type(e)
Run Code Online (Sandbox Code Playgroud)

file2.py

def tfun():
    from file1 import TestException
    raise TestException()
Run Code Online (Sandbox Code Playgroud)

输出来自python file1.py以下内容:

I am running
I am running
I am caught
<class 'file1.TestException'>
I am generally caught
<class 'file1.TestException'>
Run Code Online (Sandbox Code Playgroud)

首先,在这种情况下代码执行两次的原因是什么?我可以理解导入是递归的,但为什么脚本的代码再次执行?

其次,第二次它没有被同一个except块捕获,即使它与第一次类型相同,我也找不到解释.

最后,我试图找到解决此问题的方法,而不将任何内容移动到新文件,但我似乎没有任何.有可能克服这个问题吗?

编辑

对于第二个问题,我意识到这是因为代码在模块级别内.

python import recursion exception

6
推荐指数
1
解决办法
738
查看次数

如何确定vim冻结的原因

使用vim时,编辑器会随机冻结大约一分钟,而发生这种情况时,vim会使用100%的核心.

问题是我不想通过禁用和启用所有内容来查找是否有一些插件导致它.这样做的原因是我想要比这更优化的东西来更好地理解如何解决vim问题.由于冻结的随机性,我无法重现问题,因此当我禁用插件时,我无法知道它是否解决了问题.

是否有一种快速的通用方法来确定哪个插件或.vimrc 命令导致此类问题?还是一种重现冻结的方法?

当冻结发生时,我尝试附加到进程,看看是否有任何插件或函数占用CPU周期,但这没有帮助.

vim

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

引发异常后继续执行循环

for item in r.get_iterator():
    if 'retweeted_status' in item:
        print('aa')
    else:
        id_twitty = item['id']
        count_ret = item['retweet_count']
Run Code Online (Sandbox Code Playgroud)

如果item['id']抛出KeyError异常,则执行终止.

如何使for循环在异常后继续执行?

python django

3
推荐指数
1
解决办法
338
查看次数

标签 统计

python ×2

django ×1

exception ×1

import ×1

recursion ×1

vim ×1