如果您只是想尝试 - 除非不处理异常,您如何在Python中执行此操作?
以下是正确的方法吗?
try:
shutil.rmtree(path)
except:
pass
Run Code Online (Sandbox Code Playgroud) 为什么人会使用contextlib.suppress来抑制异常,而不是try/ except用pass?
这两种方法之间的字符数没有区别(如果有的话,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 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(),任何建议...... !!!
此处发布的代码包含所有版本详细信息.
我已经尝试了所有可能的方法来触发它,但我失败了.它会变成'除'块.
提前致谢..
我尝试使用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:条款,甚至会搭上"特别"蟒蛇例外:SystemExit,KeyboardInterrupt,和GeneratorExit.那么为什么不使用一个except Exception:子句来捕获所有异常呢?
假设我有一个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)
即使发生错误,哪种方法最适合释放锁?
我想确保派生类实现一个特定的静态方法.我认为这样做应该可以使用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)
但是这段代码没有编译,因为断言触发了.
所以我的问题是
typename C::const_iterator(C::*)() const示例代码到底意味着什么?是不是一个const函数返回C …列表包含几个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)
哪一个更好,为什么?
我正在写蜘蛛来抓取网页.我知道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 ×9
exception ×2
bare ×1
c++ ×1
c++11 ×1
coroutine ×1
crtp ×1
except ×1
exit ×1
locking ×1
nonetype ×1
pyautogui ×1
python-2.7 ×1
python-3.x ×1
redhat ×1
try-except ×1
type-traits ×1