Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 15, 2017 13:01:48

reabko14
Зарегистрирован: 2017-04-15
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Python робота с файлами

 def Perekaz(self):
        self.schet = open(schet + '.txt','r')
        self.schet.seek(0)
        f = self.schet.read()
        self.schet.seek(0)                  
        self.schet.close()                    
        self.schet = open(schet + '.txt','w')
        n = int(input("Введите суму для перевода: "))
        f = int(f)
        if f > n:                           
            self.schet.write(str(int(f-n)))
            self.schet.seek(0)
            self.schet.close()
        else:
                print("У вас недостаточно средств на счету! \n")
                self.schet.close()
                return 0
        # это все работает  
        
        nazFaila = input("Введите номер счета для перевода: ") # делаю проверку если существует такой файл
        try:
            self.schet = open(nazFaila + '.txt','r') 
        except Exception:
            print("не удалось открыть файл")
        else:
            m = self.schet.read()
            self.schet.close()
            self.schet = open(nazFaila + '.txt','w')  #[b][u] когда открываю файл в режиме 'w', дальше код не выполняется почему?[/u][/b]
            c = int(n+m) # это не выполняется 
            print(c)         # это тоже
            self.schet.write(str(int(n+m)))  # и вот это
            self.schet.close() # и это
        finally: 
            return 0  # выполняется это и всё

Отредактировано FishHook (Апрель 15, 2017 13:26:18)

Офлайн

#2 Апрель 15, 2017 16:49:38

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Python робота с файлами

вот тут c = int(n+m)
n у вас int m - str, соответвенно n+m должно вызывать TypeError: unsupported operand type(s) for +: ‘int’ and ‘str’
но почемуто в конструкции try-except-else если исключение вызываеться в else то он не бросает еще одно исключение а просто завершает блок else. ХЗ так ли задумано, или это баг.
Надеюсь что это у вас лаборатрная или на крайний случай курсовая, потому как у меня, как у работника банка, ваш код вызывает только слезы.



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Офлайн

#3 Апрель 16, 2017 04:48:03

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9999
Репутация: +  857  -
Профиль   Отправить e-mail  

Python робота с файлами

PEHDOM
но почемуто в конструкции try-except-else если исключение вызываеться в else то он не бросает еще одно исключение а просто завершает блок else. ХЗ так ли задумано, или это баг.
Всё порождается
  
>>> try:
...     1
...     print('try')
... except:
...     2
...     print('except')
... else:
...     1/0
...     print('else')
... finally:
...     print('finally')
... 
1
try
finally
Traceback (most recent call last):
  File "<stdin>", line 8, in <module>
ZeroDivisionError: division by zero
>>>



Офлайн

#4 Апрель 16, 2017 09:26:08

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Python робота с файлами

py.user.next
Всё порождается
Соглсен, но почемуто в таком виде не порождает
 def test():
    try:
        1
        print('try')
    except Exception:
        2
        print('except')
    else:
        1+'a'
        print('else')
    finally:
        print('finally')
        return 0
>>> 
try
finally
>>> 
test()
return во всем виноват в finally: без него все исключения порождаються, с ним else просто прерывается.
если return вынести из try… filally то все ок.



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Апрель 16, 2017 09:48:41)

Офлайн

#5 Апрель 16, 2017 10:04:05

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9999
Репутация: +  857  -
Профиль   Отправить e-mail  

Python робота с файлами

А здесь вот написано, что так и должно быть
python.org. try … except

If the finally clause executes a return or break statement, the saved exception is discarded:
>>> def f():
... try:
... 1/0
... finally:
... return 42
...
>>> f()
42



Отредактировано py.user.next (Апрель 16, 2017 10:04:47)

Офлайн

#6 Апрель 16, 2017 10:58:11

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Python робота с файлами

py.user.next
А здесь вот написано, что так и должно быть
хмм, а куда я раньше смотрел? провтыкал видать…



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version