相关疑难解决方法(0)

如何正确忽略异常

如果您只是想尝试 - 除非不处理异常,您如何在Python中执行此操作?

以下是正确的方法吗?

try:
    shutil.rmtree(path)
except:
    pass
Run Code Online (Sandbox Code Playgroud)

python exception try-except

734
推荐指数
10
解决办法
98万
查看次数

关于捕获任何异常

如何编写捕获所有异常的try/ exceptblock?

python exception-handling

635
推荐指数
10
解决办法
56万
查看次数

为什么使用contextlib.suppress而不是try/except with pass?

为什么人会使用contextlib.suppress来抑制异常,而不是try/ exceptpass

这两种方法之间的字符数没有区别(如果有的话,suppress有更多的字符),即使代码通常用LOC而不是字符计算,在两种情况下,当出现错误时,suppress似乎也比try/ 慢得多except被提出,当它不是:

Python 3.5.0 (v3.5.0:374f501f4567, Sep 13 2015, 02:27:37) [MSC v.1900 64 bit (AMD64)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> from timeit import timeit
>>> # With an error
>>> timeit("""with suppress(ValueError):
    x = int('a')""", setup="from contextlib import suppress")
1.9571568971892543
>>> timeit("""try:
    x = int('a')
except ValueError:
    pass""")
1.0758466499161656
>>> # With no error
>>> timeit("""with suppress(ValueError):
    x …
Run Code Online (Sandbox Code Playgroud)

python python-3.x

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

python sys.exit没有在try中工作

Python 2.7.5 (default, Feb 26 2014, 13:43:17)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> try:
...  sys.exit()
... except:
...  print "in except"
...
in except
>>> try:
...  sys.exit(0)
... except:
...  print "in except"
...
in except
>>> try:
...  sys.exit(1)
... except:
...  print "in except"
...
in except
Run Code Online (Sandbox Code Playgroud)

为什么我不能在try中触发sys.exit(),任何建议...... !!!

此处发布的代码包含所有版本详细信息.

我已经尝试了所有可能的方法来触发它,但我失败了.它会变成'除'块.

提前致谢..

python redhat exit python-2.7

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

使用裸露的'除外'有什么问题?

我尝试使用PyAutoGui创建一个函数来检查屏幕上是否显示图像,并提出了这个:

def check_image_on_screen(image):
    try:
        pyautogui.locateCenterOnScreen(image)
        return True
    except:
        return False
Run Code Online (Sandbox Code Playgroud)

它工作正常,但PyCharm告诉我,我不应该except裸露.把它留下来有什么问题?有没有更合适的方法来创建相同的功能?

python except bare pyautogui

15
推荐指数
2
解决办法
5299
查看次数

抓住Python中所有异常的坏主意

为什么在Python中捕获所有异常是一个坏主意?

据我所知,追赶使用的所有例外except:条款,甚至会搭上"特别"蟒蛇例外:SystemExit,KeyboardInterrupt,和GeneratorExit.那么为什么不使用一个except Exception:子句来捕获所有异常呢?

python exception-handling exception

8
推荐指数
2
解决办法
2622
查看次数

除了Python 2.7之外,试用锁的最佳用途是什么?

假设我有一个threading.Lock()我想要获取的对象以便使用资源.假设我想try ... except ...在资源中使用一个子句.

有几种方法可以做到这一点.

方法1

import threading
lock = threading.Lock()
try:
    with lock:
        do_stuff1()
        do_stuff2()
except:
    do_other_stuff()
Run Code Online (Sandbox Code Playgroud)

如果在do_stuff1()或期间发生错误do_stuff2(),是否会释放锁定?或者使用以下方法之一是否更好?

方法2

with lock:
    try:
        do_stuff1()
        do_stuff2()
    except:
        do_other_stuff()
Run Code Online (Sandbox Code Playgroud)

方法3

lock.acquire():
try:
    do_stuff1()
    do_stuff2()
except:
    do_other_stuff()
finally:
    lock.release()
Run Code Online (Sandbox Code Playgroud)

即使发生错误,哪种方法最适合释放锁?

python locking python-multithreading

8
推荐指数
1
解决办法
1559
查看次数

确保派生类实现静态方法

我想确保派生类实现一个特定的静态方法.我认为这样做应该可以使用static_assert,std :: is_same,decltype,CRTP并且可能使用SFINAE.但是,到目前为止,我发现的类似代码非常复杂,似乎我还没有完全理解它使我无法将其用于我的需求.

到目前为止我尝试过的是这个

template <class T>
class Base 
{
    static_assert(std::is_same<decltype(T::foo(1)), int>::value, "ERROR STRING");
};

class Derived : public Base <Derived>
{
public:
    static int foo(int i) { return 42; };
};
Run Code Online (Sandbox Code Playgroud)

但是,它没有编译告诉我,即使方法正确实现,Derived也没有名为foo的元素.此外,在static_assert内的表达式中为foo提供实际参数会感觉不对.

搜索SO揭示了一个类似的问题,最终引导我到这段代码,检查一个类型有方法begin()和end()返回迭代器.所以我试着采用这个代码来满足我的需求.

template <class T>
class Base 
{
    template<typename C>
    static char(&g(typename std::enable_if<std::is_same<decltype(static_cast<int(C::*)(int)>(&C::foo)), int(C::*)(int)>::value, void>::type*))[1];

    template<typename C>
    static char(&g(...))[2];

    static_assert(sizeof(g<T>(0)) == 1, "ERROR STRING");
};
Run Code Online (Sandbox Code Playgroud)

但是这段代码没有编译,因为断言触发了.

所以我的问题是

  1. 为什么编译器在我的第一个例子中找不到Derived :: foo?
  2. typename C::const_iterator(C::*)() const示例代码到底意味着什么?是不是一个const函数返回C …

c++ static-assert crtp type-traits c++11

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

哪种方式最好跳过'NoneType'变量?

列表包含几个NoneType元素.跳过NoneType,

for item in list :
    if item is not None :
        fp.write(item + '\n')

#OR

for item in list : 
    try :
        fp.write(item + '\n')
    except :
        pass
Run Code Online (Sandbox Code Playgroud)

哪一个更好,为什么?

python nonetype

6
推荐指数
2
解决办法
7554
查看次数

如何使用Ctrl + C优雅地关闭协同程序?

我正在写蜘蛛来抓取网页.我知道asyncio可能是我最好的选择.所以我使用协同程序异步处理工作.现在我抓住了关于如何通过键盘中断退出程序的问题.所有工作完成后,该程序可能会关闭.源代码可以在python 3.5中运行,并在下面附上.

import asyncio
import aiohttp
from contextlib import suppress

class Spider(object):
    def __init__(self):
        self.max_tasks = 2
        self.task_queue = asyncio.Queue(self.max_tasks)
        self.loop = asyncio.get_event_loop()
        self.counter = 1

    def close(self):
        for w in self.workers:
            w.cancel()

    async def fetch(self, url):
        try:
            async with aiohttp.ClientSession(loop = self.loop) as self.session:
                with aiohttp.Timeout(30, loop = self.session.loop):
                    async with self.session.get(url) as resp:
                        print('get response from url: %s' % url)
        except:
            pass
        finally:
            pass

    async def work(self):
        while True:
            url = await self.task_queue.get()
            await self.fetch(url)
            self.task_queue.task_done()

    def assign_work(self): …
Run Code Online (Sandbox Code Playgroud)

python coroutine python-asyncio

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