5702701
你是否也曾遇到过这样的情况:抽屉角落里躺着一台几年前办理的个人POS机,早已落满灰尘,但心里总隐隐有些不安——这东西不用了,到底该怎么处理?直接扔掉会不会泄露信息?会不会继续扣费?今天,咱们就来好好聊聊这个话题,把“怎么取消个人办pos机”这件事,给你彻底讲明白。
首先,一个最重要的结论是:个人POS机不再使用,最负责任的做法是主动注销,而不是简单闲置或丢弃。虽然有些资料显示,长期不用的机器支付公司可能会自动将其标记为“沉默商户”并停止服务,但这存在不确定性,且无法及时释放你在支付机构占用的商户名额。随着监管趋严,一个人名下能在不同支付公司注册的小微商户数量是有限制的,不注销“沉睡”的旧商户,可能会影响你未来办理新的收款业务。
那么,具体该怎么操作呢?别急,咱们一步步来。
第一步:先搞清楚你的POS机是哪里办的。这是决定注销路径的关键。主要分两种情况:
| 办理渠道 | 注销主体/方式 | 核心准备材料 |
|---|---|---|
| :--- | :--- | :--- |
| 银行办理 | 前往原办理银行网点,或致电银行客服申请注销。 | 本人身份证、原绑定的银行卡、POS机终端(如需退还)。 |
| 第三方支付公司办理(最常见) | 联系该支付公司的官方客服,或通过其官方APP、公众号操作。 | 商户编号、注册手机号、身份证信息、结算卡号等。 |
这里有个小技巧:如果你不记得是哪家支付公司了,可以查看POS机打印---
layout: post
title: "[翻译] 深入理解Python中的上下文管理器"date: 2018-06-11 00:00:00
categories: python
tags: python
excerpt: 本文介绍了Python中上下文管理器的工作方式,以及如何创建自己的上下文管理器
mathjax: true
*content
{:toc}
原文:[Python Context Managers](https://jeffknupp.com/blog/2016/03/07/python-with-context-managers/)
你有没有好奇过Python中的`with`语句背后的工作原理?我们经常用它来读写文件,你知道它也可以用来管理锁和连接吗?
让我们来看看上下文管理器,它是Python中最容易被低估的特性。
---
最常见的用例是资源管理。你肯定要确保像文件、网络连接这样的资源在使用过后被关闭或释放。出错时这些资源也可能会泄漏。将它们放在一个`try/finally`块中通常是一种很好的做法,可以确保无论是否发生错误都能执行清理操作。
上下文管理器通过抽象出大部分样板代码来简化这个过程。它的常见用法是通过`with`语句来调用,所以你肯定已经见过了。让我们看一个例子。
我们将通过一个文件操作的简单例子来演示。你需要打开一个文件,写入一些内容,然后关闭它。如果不使用上下文管理器,代码可能是这样的:
```
fd = open('foo.txt', 'w')
fd.write('foo')
fd.close()
```
这里可能发生许多错误。例如,如果在打开文件和尝试写入之间发生了某些错误,`fd.close()`将永远不会被调用。为了解决这个问题,我们可以使用`try/finally`块:
```
fd = open('foo.txt', 'w')
try:
fd.write('foo')
finally:
fd.close()
```
但是还有更好的方法吗?让我们看看如何使用上下文管理器来做到这一点。
使用上下文管理器的Pythonic方法是使用`with`语句:
```
with open('foo.txt', 'w') as fd:
fd.write('foo')
```
这看起来干净多了!`open()`返回一个文件对象,该对象也是一个上下文管理器。`with`语句在内部调用文件对象的`__enter__`和`__exit__`方法。如果发生异常,`__exit__`方法会关闭文件并传播异常。如果一切顺利,`__exit__`方法仍然会关闭文件。这确保了文件会被正确关闭。
你还可以在一个`with`语句中打开多个文件:
```
with open('foo.txt', 'w') as fd, open('bar.txt', 'w') as bd:
fd.write('foo')
bd.write('bar')
```
---
现在你知道了`with`语句可以做什么,让我们看看它是如何工作的。它有两个魔法方法:`__enter__`和`__exit__`。
当解释器遇到`with`语句时,它会调用`__enter__`方法。`__enter__`方法的返回值被赋给`as`关键字后面的变量。执行完`with`语句块后,解释器调用`__exit__`方法。
让我们创建一个自定义的上下文管理器来更好地理解它。
---
有两种方法可以创建自定义上下文管理器:基于类的和基于生成器的。让我们从基于类的方法开始。
我们需要实现`__enter__`和`__exit__`方法。这里有一个简单的例子:
```
class MyContextManager:
def __enter__(self):
print("Entering the block" return self
def __exit__(self, exc_type, exc_value, traceback):
print("iting the block" if exc_type:
print(f" error occurred: {exc_value}" return True # 抑制异常
with MyContextManager() as mcm:
print("Inside the block" raise ValueError("Something went wrong!"```
在这个例子中,`__exit__`方法返回`True`,这会抑制异常。如果你不希望抑制异常,可以返回`False`或什么都不返回(默认为`None`,即`False`)。
你也可以使用`contextlib`模块中的`contextmanager`装饰器来创建基于生成器的上下文管理器。这通常更简单:
```
from contextlib import contextmanager
@contextmanager
def my_context_manager():
print("Entering the block" try:
yield
except Exception as e:
print(f"An error occurred: {e}" raise
finally:
print("Exiting the block" my_context_manager():
print("ide the block" raise ValueError(" went wrong!"这里,`yield`语句之前的代码相当于`__enter__`方法,`yield`语句之后的代码相当于`__exit__`方法。`yield`的值(如果有)会赋给`as`关键字后面的变量。
---
上下文管理器不仅用于文件操作,还可以用于许多其他场景,例如:
这里有一个计时上下文管理器的例子:
```
import time
from contextlib import contextmanager
@contextmanager
def timer():
start = time.time()
try:
yield
finally:
end = time.time()
print(f"apsed time: {end - start} seconds"with timer():
time.sleep(2)
```
---
上下文管理器是Python中一个强大而优雅的特性,它通过抽象出资源管理的样板代码,使代码更简洁、更安全。无论是使用内置的上下文管理器(如`open`),还是创建自定义的上下文管理器,你都可以更好地管理资源并处理异常。
希望这篇文章能帮助你深入理解Python中的上下文管理器,并在你的项目中有效地使用它们!

5702701
本文转载自互联网,如有侵权,联系删除

微信扫码加好友领取POS机
打开微信,点击右上角"+"号,添加朋友,粘贴微信号,搜索即可!