ÉèΪÊ×Ò³ ¼ÓÈëÊÕ²Ø

TOP

pythonѧϰ±Ê¼Ç(¶þÊ®) -- withµÄʹÓÃ
2019-05-11 00:08:00 ¡¾´ó ÖРС¡¿ ä¯ÀÀ:46´Î
Tags£ºpython ѧϰ ±Ê¼Ç ¶þÊ® with ʹÓÃ
°æȨÉùÃ÷£ºÆp»¨ÏòůحéªÖ¦Ïòº® https://blog.csdn.net/weixin_40247263/article/details/82120213

Table of Contents

withµÄʹÓÃ

withµÄʹÓó¡¾°


ÍøÉÏ¿´Á˺ܶà˵һ¶ÑÀíÂ۵ģ¬ÎÒÖ±½Ó¸æËßÄãÔõôʹÓá£

withµÄʹÓÃ

>>> class Sample:
	def __enter__(self):
		return self
	def __exit__(self,type,value,trace):
		print("type:",type)
		print("value:",value)
		print("trace:",trace)
	def do_something(self):
		bar = 1/0
		return bar+10

	
>>> with Sample() as sample:
	sample.do_something

	
type: <class 'ZeroDivisionError'>
value: division by zero
trace: <traceback object at 0x000001F067DD8FC8>
Traceback (most recent call last):
  File "<pyshell#75>", line 2, in <module>
    sample.do_something()
  File "<pyshell#70>", line 9, in do_something
    bar = 1/0
ZeroDivisionError: division by zero

Ê×Ïȶ¨ÒåÁËÒ»¸öSampleÀ࣬ȻºóʹÓÃwith¹Ø¼ü×Ö£¬Ö´ÐÐÁ÷³ÌÈçÏ¡£

1: Ö´ÐÐwith¹Ø¼ü×ÖºóÃæµÄ Sample() £¬´´½¨ÁËÒ»¸öSample¶ÔÏó£¬Í¬Ê±Ö´ÐÐSampleÀàµÄ __enter__º¯Êý£¬½«__enter__º¯ÊýµÄ·µ»ØÖµ¸³Öµ¸ø as ºóÃæµÄ sample ±äÁ¿¡£

2: ´Ëʱsample±äÁ¿Ö¸ÏòµÄÊÇÒ»¸ö SampleÀàµÄ¶ÔÏó£¬ÔÙÖ´ÐРðºÅºóÃæµÄ´úÂë¼´µÚ¶þÐÐ sample.do_something£¬¼´Í¨¹ýSampleÀàµÄ¶ÔÏóÈ¥µ÷ÓÃSampleÖж¨ÒåµÄ do_something º¯Êý¡£

3: Ö´ÐÐÍê do_somethingº¯Êý£¬»ØÈ¥Ö´ÐÐ__exit__º¯Êý¡£

×¢Òâ with ´úÂë¿éÖÐÖ´ÐеÄÄÚÈÝ¿ÉÒÔ±»²¶»ñÒì³££¬¼´ Ö´ÐÐ sample.do_somethingÓï¾äʱ£¬Èç¹ûdo_somethingº¯ÊýÖÐÅ׳öÁËÒì³££¬¿ÉÒÔ±»²¶»ñµ½£¬²¢½«Òì³£ÐÅÏ¢×÷Ϊ²ÎÊý´«Èëµ½__exit__º¯ÊýÖУ¬Ò²¾ÍÊÇ˵ÎÞÂÛÊÇ·ñÓÐÒì³££¬__exit__º¯Êý¿Ï¶¨»á±»Ö´ÐУ¬ËùÒÔ__exit__ÀàËÆÓÚ finally´úÂë¿é¡£

__exit__º¯ÊýÓÐËĸö²ÎÊý£º

²ÎÊý1 ¶ÔÏó±¾Éí

²ÎÊý2 type(Å׳öµÄÒì³£¶ÔÏó) µÄ·µ»ØÖµ

²ÎÊý3 Å׳öµÄÒì³£¶ÔÏó

²ÎÊý4 Traceback ¶ÔÏó

Èç¹û ÎÒÃÇÏëµ±Å׳öijһÖÖÒ쳣ʱ²»Òª´òÓ¡³ö´íÎóÐÅÏ¢£¬¿ÉÒÔÈà __exit__º¯Êý·µ»Øtrue£¬ÈçÏÂËùʾ£º

>>> class Sample:
	def __enter__(self):
		return self
	def __exit__(self,type,value,trace):
		print("type:",type)
		print("value:",value)
		print("trace:",trace)
		return isinstance(value,ZeroDivisionError)
	def do_something(self):
		bar = 1/0
		return bar+10

	
>>> with Sample() as sample:
	sample.do_something()

	
type: <class 'ZeroDivisionError'>
value: division by zero
trace: <traceback object at 0x000001F067DE6348>

×¢Òâ with Óï¾ä Ö»Äܲ¶»ñµ½ with´úÂë¿éÖÐÖ´Ðк¯ÊýµÄÒì³££¬¼´ with xxx as x : ºóÃæµÄÄÚÈÝ£¬¾ÍÊÇðºÅºóÃæÖ´Ðеĺ¯Êý¡£

ÈçÏÂÕâÖÖÇé¿ö²¢²»Äܲ¶»ñÒì³££º

>>> class Sample:
	def __enter__(self):
		bar = 1/0
		return self
	def __exit__(self,type,value,trace):
		print("type:",type)
		print("value:",value)
		print("trace:",trace)
	def do_something(self):
		print("In do_something function")

		
>>> 
>>> with Sample() as sample:
	sample.do_something()

	
Traceback (most recent call last):
  File "<pyshell#79>", line 1, in <module>
    with Sample() as sample:
  File "<pyshell#76>", line 3, in __enter__
    bar = 1/0
ZeroDivisionError: division by zero

ÎÒ½« bar = 1/0 Õâ¾ä»áÅ׳öÒì³£µÄ´úÂëдÔÚ __enter__º¯ÊýÖУ¬µ«ÊÇͨ¹ý½á¹û¿ÉÒÔ·¢ÏÖ£¬__exit__º¯ÊýÒÔ¼°do__somthingº¯Êý²¢Ã»Óб»Ö´ÐУ¬ËùÒÔ˵Ã÷Ö´ÐÐ__enter__º¯ÊýʱÅ׳öÒì³£ºó´úÂë¾ÍÖжÏÁË£¬´Ó¶ø¿ÉÒÔµÃÖªÒì³£²¢Ã»Óб»²¶»ñ¡£

µ±È»£¬__exit__º¯ÊýÖгöÏÖÒì³£Ò²ÊÇÎÞ·¨²¶»ñµÄ

class Sample:
	def __enter__(self):
		print("In __enter__ function")
		return self
	def __exit__(self,type,value,trace):
		print("In __exit__ function")
		bar = 1/0
		print("type:",type)
		print("value:",value)
		print("trace:",trace)
	def do_something(self):
		print("In do_something function")

		
>>> with Sample() as sample:
	sample.do_something()

	
In __enter__ function
In do_something function
In __exit__ function
Traceback (most recent call last):
  File "<pyshell#103>", line 2, in <module>
    sample.do_something()
  File "<pyshell#101>", line 7, in __exit__
    bar = 1/0
ZeroDivisionError: division by zero

Èç¹ûûÓÐÒì³£µÄ»°£¬__exit__º¯ÊýÖеĺóÈý¸ö²ÎÊý»á±»´«ÈëNone

>>> class Sample:
	def __enter__(self):
		return self
	def __exit__(self,type,value,trace):
		print("type:",type)
		print("value:",value)
		print("trace:",trace)
	def do_something(self):
		print("In do_something function")

		
>>> with Sample() as sample:
	sample.do_something()

	
In do_something function
type: None
value: None
trace: None

withµÄʹÓó¡¾°

ÓÐһЩÈÎÎñ£¬¿ÉÄÜÊÂÏÈÐèÒªÉèÖã¬Êºó×öÇåÀí¹¤×÷¡£¶ÔÓÚÕâÖÖ³¡¾°£¬PythonµÄwithÓï¾äÌṩÁËÒ»Öַdz£·½±ãµÄ´¦Àí·½Ê½¡£Ò»¸öºÜºÃµÄÀý×ÓÊÇÎļþ´¦Àí£¬ÄãÐèÒª»ñÈ¡Ò»¸öÎļþ¾ä±ú£¬´ÓÎļþÖжÁÈ¡Êý¾Ý£¬È»ºó¹Ø±ÕÎļþ¾ä±ú¡£

ÏÂһƪÎÄÕÂÎÒ½«»áչʾ¶ÁÈ¡Îļþ²Ù×÷ʱʹÓà withÓï¾ä £¬µã»÷ÕâÀï²é¿´¡£

¡¾´ó ÖРС¡¿¡¾´òÓ¡¡¿ ¡¾·±Ìå¡¿¡¾Í¶¸å¡¿¡¾Êղء¿ ¡¾ÍƼö¡¿¡¾¾Ù±¨¡¿¡¾ÆÀÂÛ¡¿ ¡¾¹Ø±Õ¡¿ ¡¾·µ»Ø¶¥²¿¡¿
ÉÏһƪ£ºÅжÏÁ½¸öÁ´±íÊÇ·ñÓн»µã ÏÂһƪ£ºCenos python2.6Éý¼¶2.7ºó´æÔÚÎÊÌâ

×îÐÂÎÄÕÂ

ÈÈÃÅÎÄÕÂ

Hot ÎÄÕÂ

Python

C ÓïÑÔ

C++»ù´¡

´óÊý¾Ý»ù´¡

linux±à³Ì»ù´¡

C/C++ÃæÊÔÌâÄ¿