Хелпикс

Главная

Контакты

Случайная статья





break. import pickle



Д о м а ш н е е з а д а н и е

 

П р о в е р к а, я в л я е т с я л и т е к с т п а л и н д р о м о м д о л ж н а т а к ж е и г н о р и р о в а т ь з н а к и п у н к т у а -ц и и, п р о б е л ы и р е г и с т р б у к в. Н а п р и м е р, «А р о з а у п а л а н а л а п у А з о р а » т а к ж е я в л я е т с я п а л и н д р о м о м, н о н а ш а т е к у щ а я п р о г р а м м а т а к н е с ч и т а е т. П о п р о б у й т е у л у ч и т ь е ё т а к, ч т о б ы о н а р а с п о з н а л а э т о т п а л и н д р о м.

 

 

П о д с к а з к а: (н е ч и т а й т е )

 

В о с п о л ь з у й т е с ь к о р т е ж е м (с п и с о к в с е х з н а к о в п у н к т у а ц и и м о ж н о н а й т и з д е с ь ), с о д е р ж а -щ и м в с е з а п р е щ ё н н ы е с и м в о л ы, и п р и м е н и т е т е с т н а п р и н а д л е ж н о с т ь, ч т о б ы о б н а р у -ж и т ь с и м в о л ы, п о д л е ж а щ и е у д а л е н и ю, т. е. forbidden = (‘! ’, ‘? ’, ‘. ’, …).

 

15. 2 Ф а й л ы

 

О т к р ы в а т ь и и с п о л ь з о в а т ь ф а й л ы д л я ч т е н и я и л и з а п и с и м о ж н о п у т ё м с о з д а н и я о б ъ е к т а к л а с с а file, а ч и т а т ь /з а п и с ы в а т ь в ф а й л – п р и п о м о щ и е г о м е т о д о в read, readline и л и write с о о т в е т с т в е н н о. В о з м о ж н о с т ь ч и т а т ь и л и з а п и с ы в а т ь в ф а й л з а в и с и т о т р е ж и м а, у к а з а н н о г о п р и о т к р ы т и и ф а й л а. П о о к о н ч а н и и р а б о т ы с ф а й л о м, н у ж н о в ы з в а т ь м е т о д close1, ч т о б ы у к а з а т ь Python, ч т о ф а й л б о л ь ш е н е и с п о л ь з у е т с я.

close – а н г л. «з а к р ы в а т ь » (п р и м. п е р е в )


 

 

114                                                                                                                                    Г л а в а 15. В в о д -в ы в о д


A Byte of Python (Russian), В е р с и я 2. 01

 

 

П р и м е р: (с о х р а н и т е к а к using_file. py)

 

poem = ''' \

 

П р о г р а м м и р о в а т ь в е с е л о.

 

Е с л и р а б о т а с к у ч н а,

 

Ч т о б ы п р и д а т ь е й в е с ё л ы й т о н -

 

и с п о л ь з у й Python!

 

'''

 

f = open('poem. txt', 'w') # о т к р ы в а е м д л я з а п и с и (writing)

 

f. write(poem) # з а п и с ы в а е м т е к с т в ф а й л

 

f. close() # з а к р ы в а е м ф а й л

 

f = open('poem. txt') # е с л и н е у к а з а н р е ж и м, п о у м о л ч а н и ю п о д р а з у м е в а е т с я

 

# р е ж и м ч т е н и я ('r'eading)

 

while True:

 

line = f. readline()

 

if len(line)==0: #Н у л е в а я д л и н а о б о з н а ч а е т к о н е ц ф а й л а (EOF)

 

break

 

print (line, end='')

 

f. close() # з а к р ы в а е м ф а й л

 

В ы в о д:

 

$ python3 using_file. py

 

П р о г р а м м и р о в а т ь в е с е л о.

 

Е с л и р а б о т а с к у ч н а,

 

Ч т о б ы п р и д а т ь е й в е с ё л ы й т о н -

 

и с п о л ь з у й Python!

 

К а к э т о р а б о т а е т:

 

С п е р в а м ы о т к р ы в а е м ф а й л п р и п о м о щ и в с т р о е н н о й ф у н к ц и и open с у к а з а -н и е м и м е н и ф а й л а и р е ж и м а, в к о т о р о м м ы х о т и м е г о о т к р ы т ь. Р е ж и м м о ж е т б ы т ь д л я ч т е н и я ('r'), з а п и с и ('w') и л и д о б а в л е н и я ('a')2. М о ж н о т а к ж е у к а -з а т ь, в к а к о м в и д е м ы б у д е м с ч и т ы в а т ь, з а п и с ы в а т ь и л и д о б а в л я т ь д а н н ы е:

 

т е к с т о в о м ('t') и л и б и н а р н о м ('b'). Н а с а м о м д е л е с у щ е с т в у е т м н о г о д р у -г и х р е ж и м о в, и help(open) д а с т в а м и х д е т а л ь н о е о п и с а н и е. П о у м о л ч а н и ю open() о т к р ы в а е т ф а й л к а к т е к с т в р е ж и м е д л я ч т е н и я.

 

н а ш е м п р и м е р е м ы с н а ч а л а о т к р ы в а е м ф а й л в р е ж и м е з а п и с и т е к с т а и и с -п о л ь з у е м м е т о д write ф а й л о в о г о о б ъ е к т а д л я з а п и с и в ф а й л, п о с л е ч е г о з а -к р ы в а е м ф а й л п р и п о м о щ и close.

 

Д а л е е м ы о т к р ы в а е м т о т ж е с а м ы й ф а й л д л я ч т е н и я. В э т о м с л у ч а е н е т н у ж д ы у к а з ы в а т ь р е ж и м, т а к к а к р е ж и м «ч т е н и я т е к с т о в о г о ф а й л а » п р и м е н я е т с я п о у м о л ч а н и ю. М ы с ч и т ы в а е м ф а й л п о с т р о ч н о м е т о д о м readline в ц и к л е. Э т о т

 

r ead, w riteи a ppendс о о т в е т с т в е н н о (п р и м. п е р е в. )


 

 

15. 2. Ф а й л ы                                                                                                                                                                    115


A Byte of Python (Russian), В е р с и я 2. 01

 

 

м е т о д в о з в р а щ а е т п о л н у ю с т р о к у, в к л ю ч а я с и м в о л п е р е в о д а с т р о к и в к о н ц е. К о г д а ж е о н в о з в р а щ а е т п у с т у ю с т р о к у, э т о о з н а ч а е т, ч т о м ы д о с т и г л и к о н ц а ф а й л а, и м ы п р е р ы в а е м ц и к л п р и п о м о щ и break.

 

П о у м о л ч а н и ю ф у н к ц и я print() в ы в о д и т т е к с т, а в т о м а т и ч е с к и д о б а в л я я с и м -в о л п е р е в о д а с т р о к и в к о н ц е. М ы п о д а в л я е м э т о т с и м в о л, у к а з ы в а я end='', п о с к о л ь к у с т р о к и, с ч и т а н н ы е и з ф а й л а, и б е з т о г о о к а н ч и в а ю т с я с и м в о л о м п е р е в о д а с т р о к и. И, н а к о н е ц, м ы з а к р ы в а е м ф а й л с п о м о щ ь ю close.

 

Т е п е р ь п р о в е р я е м с о д е р ж и м о е ф а й л а poem. txt, ч т о б ы у б е д и т ь с я, ч т о п р о г р а м -м а д е й с т в и т е л ь н о з а п и с а л а т е к с т в н е г о и с ч и т а л а и з н е г о.

 

 

15. 3 Pickle

 

Python п р е д о с т а в л я е т с т а н д а р т н ы й м о д у л ь с и м е н е м pickle3, п р и п о м о щ и к о т о р о г о м о ж -н о с о х р а н я т ь л ю б о й о б ъ е к т Python в ф а й л е, а з а т е м и з в л е к а т ь е г о о б р а т н о. Э т о н а з ы в а е т с я д л и т е л ь н ы м х р а н е н и е м о б ъ е к т а.

 

П р и м е р: (с о х р а н и т е к а к pickling. py):

 

import pickle

 

и м я ф а й л а, в к о т о р о м м ы с о х р а н и м о б ъ е к т

 

shoplistfile = 'shoplist. data'

 

с п и с о к п о к у п о к

 

shoplist = ['я б л о к и ', 'м а н г о ', 'м о р к о в ь ']

 

З а п и с ь в ф а й л

 

= open(shoplistfile, 'wb')

 

pickle. dump(shoplist, f) # п о м е щ а е м о б ъ е к т в ф а й л f. close()

 

del shoplist#у н и ч т о ж а е м п е р е м е н н у ю shoplist

 

С ч и т ы в а е м и з х р а н и л и щ а

 

= open(shoplistfile, 'rb')

 

storedlist = pickle. load(f) # з а г р у ж а е м о б ъ е к т и з ф а й л а print (storedlist)

 

В ы в о д:

 

$ python3 pickling. py

 

['я б л о к и ', 'м а н г о ', 'м о р к о в ь ']

 

К а к э т о р а б о т а е т:

 

pickle – а н г л. «м а р и н о в а т ь », «с о л и т ь » (п р и м. п е р е в. )


 

 

116                                                                                                                                    Г л а в а 15. В в о д -в ы в о д


A Byte of Python (Russian), В е р с и я 2. 01

 

 

Ч т о б ы с о х р а н и т ь о б ъ е к т в ф а й л е, н а м н у ж н о с п е р в а о т к р ы т ь ф а й л с п о м о щ ь ю open в р е ж и м е б и н а р н о й з а п и с и ('wb'), п о с л е ч е г о в ы з в а т ь ф у н к ц и ю dump и з м о д у л я pickle. Э т о т п р о ц е с с н а з ы в а е т с я «к о н с е р в а ц и е й » («pickling»).

 

П о с л е э т о г о м ы и з в л е к а е м о б ъ е к т п р и п о м о щ и ф у н к ц и и load и з м о д у л я pickle, к о т о р а я в о з в р а щ а е т о б ъ е к т. Э т о т п р о ц е с с н а з ы в а е т с я «р а с к о н с е р в а ц и -е й » («unpickling»).

 

 

15. 4 Р е з ю м е

 

М ы о б с у д и л и р а з н ы е т и п ы в в о д а /в ы в о д а, а т а к ж е р а б о т у с ф а й л а м и и и с п о л ь з о в а н и е м о д у л я pickle.

 

Д а л е е м ы п о з н а к о м и м с я с к о н ц е п ц и е й и с к л ю ч е н и й.


 

 

15. 4. Р е з ю м е                                                                                                                                                                  117


A Byte of Python (Russian), В е р с и я 2. 01


 

118                                                                                                                                    Г л а в а 15. В в о д -в ы в о д


 

И с к л ю ч е н и я

 

 

И с к л ю ч е н и я в о з н и к а ю т т о г д а, к о г д а в п р о г р а м м е в о з н и к а е т н е к о т о р а я и с к л ю ч и т е л ь н а я с и т у а ц и я. Н а п р и м е р, к ч е м у п р и в е д ё т п о п ы т к а ч т е н и я н е с у щ е с т в у ю щ е г о ф а й л а? И л и е с л и ф а й л б ы л с л у ч а й н о у д а л ё н, п о к а п р о г р а м м а р а б о т а л а? Т а к и е с и т у а ц и и о б р а б а т ы в а -ю т с я п р и п о м о щ и и с к л ю ч е н и й.

 

Э т о к а с а е т с я и п р о г р а м м, с о д е р ж а щ и х н е д е й с т в и т е л ь н ы е к о м а н д ы. В э т о м с л у ч а е Python п о д н и м а е т р у к и и с о о б щ а е т, ч т о о б н а р у ж и л о ш и б к у.

 

16. 1 О ш и б к и

 

Р а с с м о т р и м п р о с т о й в ы з о в ф у н к ц и и print. Ч т о, е с л и м ы о ш и б о ч н о н а п и ш е м print к а к Print? О б р а т и т е в н и м а н и е н а з а г л а в н у ю б у к в у. В э т о м с л у ч а е Python п о д н и м а е т с и н т а к -с и ч е с к у ю о ш и б к у.

 

Print('П р и в е т, М и р! ') Traceback (most recent call last):

File " < pyshell#0> ", line 1, in < module> Print('П р и в е т, М и р! ')

NameError: name 'Print' is not defined

print ('П р и в е т, М и р! ')

 

П р и в е т, М и р!

 

О б р а т и т е в н и м а н и е, ч т о б ы л а п о д н я т а о ш и б к а NameError, а т а к ж е у к а з а н о м е с т о, г д е б ы л а о б н а р у ж е н а о ш и б к а. Т а к в д а н н о м с л у ч а е д е й с т в у е т о б р а б о т ч и к о ш и б о к .

 

16. 2 И с к л ю ч е н и я

 

П о п ы т а е м с я с ч и т а т ь ч т о -л и б о о т п о л ь з о в а т е л я. Н а ж м и т е С trl-Dи п о с м о т р и т е, ч т о п р о -и з о й д ё т.

 

s = input('В в е д и т е ч т о -н и б у д ь --> ')

 

В в е д и т е ч т о -н и б у д ь -->

 

Traceback (most recent call last):

 

File " < pyshell#2> ", line 1, in < module>


 


A Byte of Python (Russian), В е р с и я 2. 01

 

s = input('В в е д и т е ч т о -н и б у д ь --> ')

 

EOFError: EOF when reading a line

 

Python п о д н и м а е т о ш и б к у с и м е н е м EOFError, ч т о о з н а ч а е т, ч т о о н о б н а р у ж и л с и м в о л к о н ц а ф а й л а (к о т о р ы й в в о д и т с я п р и п о м о щ и Ctrl-D)т а м, г д е н е о ж и д а л.

 

 

16. 3 О б р а б о т к а и с к л ю ч е н и й

 

О б р а б а т ы в а т ь и с к л ю ч е н и я м о ж н о п р и п о м о щ и о п е р а т о р а try.. except1. П р и э т о м в с е о б ы ч н ы е к о м а н д ы п о м е щ а ю т с я в н у т р ь try-б л о к а, а в с е о б р а б о т ч и к и и с к л ю ч е н и й – в except-б л о к.

 

П р и м е р: (с о х р а н и т е к а к try_except. py)

 

try:

 

text = input('В в е д и т е ч т о -н и б у д ь --> ')

 

except EOFError:

 

print ('Н у з а ч е м в ы с д е л а л и м н е EOF? ')

 

except KeyboardInterrupt:

 

print ('В ы о т м е н и л и о п е р а ц и ю. ')

 

else:

 

print ('В ы в в е л и {0}'. format(text))

 

В ы в о д:

 

$ python3 try_except. py

 

В в е д и т е ч т о -н и б у д ь -->        # Н а ж м и т е ctrl-d

 

Н у з а ч е м в ы с д е л а л и м н е EOF?

 

$ python3 try_except. py

 

В в е д и т е ч т о -н и б у д ь -->        # Н а ж м и т е ctrl-c

 

В ы о т м е н и л и о п е р а ц и ю.

 

$ python3 try_except. py

 

В в е д и т е ч т о -н и б у д ь --> б е з о ш и б о к

 

В ы в в е л и б е з о ш и б о к

 

К а к э т о р а б о т а е т:

 

З д е с ь м ы п о м е с т и л и в с е к о м а н д ы, к о т о р ы е м о г у т в ы з в а т ь и с к л ю ч е -н и я /о ш и б к и, в н у т р ь б л о к а try, а з а т е м п о м е с т и л и о б р а б о т ч и к и с о о т в е т -с т в у ю щ и х о ш и б о к /и с к л ю ч е н и й в б л о к except. В ы р а ж е н и е except м о ж е т о б -р а б а т ы в а т ь к а к о д и н о ч н у ю о ш и б к у и л и и с к л ю ч е н и е, т а к и с п и с о к о ш и -б о к /и с к л ю ч е н и й в с к о б к а х. Е с л и н е у к а з а н о и м я о ш и б к и и л и и с к л ю ч е н и я, о б р а б а т ы в а т ь с я б у д у т в с е о ш и б к и и и с к л ю ч е н и я.

 

try – а н г л. «п ы т а т ь с я » (п р и м. п е р е в. )


 

120                                                                                                                                   Г л а в а 16. И с к л ю ч е н и я


A Byte of Python (Russian), В е р с и я 2. 01

 

 

П о м н и т е, ч т о д л я к а ж д о г о в ы р а ж е н и я try д о л ж н о б ы т ь х о т я б ы о д н о с о о т в е т с т в у ю щ е е в ы р а ж е н и е except. И н а ч е к а к о й с м ы с л б ы л б ы в б л о к е try?

 

Е с л и о ш и б к а и л и и с к л ю ч е н и е н е о б р а б о т а н о, б у д е т в ы з в а н о б р а б о т ч и к Python п о у м о л -ч а н и ю, к о т о р ы й о с т а н а в л и в а е т в ы п о л н е н и е п р о г р а м м ы и в ы в о д и т н а э к р а н с о о б щ е н и е о б о ш и б к е. В ы ш е м ы у ж е в и д е л и э т о в д е й с т в и и.

 

М о ж н о т а к ж е д о б а в и т ь п у н к т else к с о о т в е т с т в у ю щ е м у б л о к у try.. except. Э т о т п у н к т б у д е т в ы п о л н е н т о г д а, к о г д а и с к л ю ч е н и й н е в о з н и к а е т.

 

с л е д у ю щ е м п р и м е р е м ы у в и д и м, к а к м о ж н о п о л у ч и т ь о б ъ е к т и с к л ю ч е н и я д л я д а л ь -н е й ш е й р а б о т ы с н и м.

 

 

16. 4 В ы з о в и с к л ю ч е н и я

 

И с к л ю ч е н и е м о ж н о п о д н я т ь п р и п о м о щ и о п е р а т о р а raise2, п е р е д а в е м у и м я о ш и б -к и /и с к л ю ч е н и я, а т а к ж е о б ъ е к т и с к л ю ч е н и я, к о т о р ы й н у ж н о в ы б р о с и т ь .

 

В ы з ы в а е м а я о ш и б к а и л и и с к л ю ч е н и е д о л ж н а б ы т ь к л а с с о м, к о т о р ы й п р я м о и л и н е п р я м о я в л я е т с я п р о и з в о д н ы м о т к л а с с а Exception.

 

П р и м е р: (с о х р а н и т е к а к raising. py)

 

class ShortInputException (Exception):

 

'''П о л ь з о в а т е л ь с к и й к л а с с и с к л ю ч е н и я. ''' def __init__(self, length, atleast):

Exception. __init__(self)

 

self. length = length

 

self. atleast = atleast

 

try:

 

text = input('В в е д и т е ч т о -н и б у д ь --> ')

 

if len(text)< 3:

 

raise ShortInputException(len(text), 3)

 

З д е с ь м о ж е т п р о и с х о д и т ь о б ы ч н а я р а б о т а

 

except EOFError:

 

print ('Н у з а ч е м в ы с д е л а л и м н е EOF? ')

 

except ShortInputException as ex:

 

print ('ShortInputException: Д л и н а в в е д ё н н о й с т р о к и -- {0}; \ о ж и д а л о с ь, к а к м и н и м у м, {1}'. format(ex. length, ex. atleast))

else:

 

print ('Н е б ы л о и с к л ю ч е н и й. ')

 

В ы в о д:

 

$ python3 raising. py

 

В в е д и т е ч т о -н и б у д ь --> а

 

raise – а н г л. “п о д н и м а т ь ” (п р и м. п е р е в. )


 

 

16. 4. В ы з о в и с к л ю ч е н и я                                                                                                                                      121


A Byte of Python (Russian), В е р с и я 2. 01

 

ShortInputException: Д л и н а в в е д ё н н о й с т р о к и -- 1; о ж и д а л о с ь, к а к м и н и м у м, 3

 

$ python3 raising. py

 

В в е д и т е ч т о -н и б у д ь --> а б в

 

Н е б ы л о и с к л ю ч е н и й.

 

К а к э т о р а б о т а е т:

 

З д е с ь м ы с о з д а ё м н а ш с о б с т в е н н ы й т и п и с к л ю ч е н и я. Э т о т н о в ы й т и п и с к л ю -ч е н и я н а з ы в а е т с я ShortInputException. О н с о д е р ж и т д в а п о л я: length, х р а н я -щ е е д л и н у в в е д ё н н о г о т е к с т а, и atleast, у к а з ы в а ю щ е е, к а к у ю м и н и м а л ь н у ю д л и н у т е к с т а о ж и д а л а п р о г р а м м а.

 

п у н к т е except м ы у к а з ы в а е м к л а с с о ш и б к и ShortInputException, к о т о -р ы й б у д е т с о х р а н ё н к а к 3 п е р е м е н н а я ex, с о д е р ж а щ а я с о о т в е т с т в у ю щ и й о б ъ е к т о ш и б к и /и с к л ю ч е н и я. Э т о а н а л о г и ч н о п а р а м е т р а м и а р г у м е н т а м п р и в ы з о в е ф у н к ц и и. В н у т р и э т о г о п у н к т а except м ы и с п о л ь з у е м п о л я length и atleast о б ъ е к т а и с к л ю ч е н и я д л я в ы в о д а н е о б х о д и м ы х с о о б щ е н и й п о л ь з о в а т е л ю.

 

 

16. 5 Try.. Finally

 

П р е д с т а в и м, ч т о п р о г р а м м е п р о и с х о д и т ч т е н и е ф а й л а и н е о б х о д и м о у б е д и т ь с я, ч т о о б ъ -е к т ф а й л а б ы л к о р р е к т н о з а к р ы т и ч т о н е в о з н и к л о н и к а к о г о и с к л ю ч е н и я. Э т о г о м о ж н о д о с т и ч ь с п р и м е н е н и е м б л о к а finally.

 

С о х р а н и т е к а к finally. py:

 



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.