powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Организовать вылет на проверке
10 сообщений из 10, страница 1 из 1
Организовать вылет на проверке
    #38939988
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день всем
пытаюсь написать класс, любые операции с которым вызывали бы нужно мне исключение

Код: python
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
class CrazyObj:
    """Crazy object for test circulate call. All operation redefined"""
    def __int__(self):raise circleError #- приведение к int.
    def __float__(self):raise circleError #- приведение к float.
    
    def __add__(self, other):raise circleError
    def __sub__(self, other):raise circleError    
    def __mul__(self, other):raise circleError    
    def __truediv__(self, other):raise circleError    
    def __floordiv__(self, other):raise circleError    
    def __mod__(self, other):raise circleError    
    def __divmod__(self, other):raise circleError    
    def __pow__(self, other):raise circleError    
    def __lshift__(self, other):raise circleError    
    def __rshift__(self, other):raise circleError    
    def __and__(self, other):raise circleError    
    def __xor__(self, other):raise circleError    
    def __or__(self, other):raise circleError    
    
    def __radd__(self, other):raise circleError
    def __rsub__(self, other):raise circleError    
    def __rmul__(self, other):raise circleError    
    def __rtruediv__(self, other):raise circleError    
    def __rfloordiv__(self, other):raise circleError    
    def __rmod__(self, other):raise circleError    
    def __rdivmod__(self, other):raise circleError    
    def __rpow__(self, other):raise circleError    
    def __rlshift__(self, other):raise circleError    
    def __rrshift__(self, other):raise circleError    
    def __rand__(self, other):raise circleError    
    def __rxor__(self, other):raise circleError    
    def __ror__(self, other):raise circleError 
l_o=CrazyObj()
if l_o:
    print "Not ok"



осталось сделать исключении при проверках в if, можно это как-то сделать?
...
Рейтинг: 0 / 0
Организовать вылет на проверке
    #38940156
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот блин и с or и and тоже косяк, они в if не вызываются
Код: python
1.
2.
if l_o or False:
    print "Not ok"


печалька :-(
...
Рейтинг: 0 / 0
Организовать вылет на проверке
    #38940257
Фотография FishHook
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan),
что за бред?
...
Рейтинг: 0 / 0
Организовать вылет на проверке
    #38940264
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FishHook,

кому бред, а кому удобства в численных расчётах - фактически реализация логики с NULL
пока версия такая

Код: python
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
class CrazyObj:
    """Crazy object for test circlyc call, null values. All operation redefined to raise some exception"""
    def __init__(self, someException):
        self.e=someException
    def __repr__(self):
        return str(self.e)
    def __int__(self):raise self.e #- приведение к int.
    def __float__(self):raise self.e #- приведение к float.
    def __long__(self):raise self.e #- приведение к long.
#    def __bool__(self):raise self.e #- приведение к bool.
    def __index__(self):raise self.e
#    Unary Operators
    def __neg__(self):raise self.e #-
    def __pos__(self):raise self.e  #+
    def __abs__(self):raise self.e #abs
    def __invert__(self):raise self.e #~
    def __complex__(self):raise self.e #complex
#    Binary Operators
    def __add__(self, other):raise self.e
    def __sub__(self, other):raise self.e
    def __mul__(self, other):raise self.e
    def __truediv__(self, other):raise self.e
    def __floordiv__(self, other):raise self.e
    def __mod__(self, other):raise self.e
    def __divmod__(self, other):raise self.e
    def __pow__(self, other):raise self.e
    def __lshift__(self, other):raise self.e
    def __rshift__(self, other):raise self.e
    def __and__(self, other):raise self.e
    def __xor__(self, other):raise self.e
    def __or__(self, other):raise self.e
    
    def __radd__(self, other):raise self.e
    def __rsub__(self, other):raise self.e
    def __rmul__(self, other):raise self.e
    def __rtruediv__(self, other):raise self.e
    def __rfloordiv__(self, other):raise self.e
    def __rmod__(self, other):raise self.e
    def __rdivmod__(self, other):raise self.e
    def __rpow__(self, other):raise self.e
    def __rlshift__(self, other):raise self.e
    def __rrshift__(self, other):raise self.e
    def __rand__(self, other):raise self.e
    def __rxor__(self, other):raise self.e
    def __ror__(self, other):raise self.e
#    Comparison Operators
    def __lt__(self, other):raise self.e   #<
    def __le__(self, other):raise self.e   #<=
    def __eq__(self, other):raise self.e   #==
    def __ne__(self, other):raise self.e   #<>
    def __ge__(self, other):raise self.e   #>=
    def __gt__(self, other):raise self.e   #>

...
Рейтинг: 0 / 0
Организовать вылет на проверке
    #38940278
Фотография FishHook
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan),

Если тебе на самом деле надо то что ты нафантазировал, то наш питонячий подход выглядит так
Код: python
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
class Meta(object):
    def __new__(cls, name, bases, dct):
        for key in dct["specials"]:
            dct["__%s__" % key] = dct["exception"]
        return type(name, bases, dct)


class CrazyObj:
    __metaclass__ = Meta
    specials = ["float", "long", "index"]

    def exception(self):
        raise self.e

    def __init__(self, some_exception):
        self.e = some_exception

l_o = CrazyObj(Exception)
print l_o.__class__.__dict__
...
Рейтинг: 0 / 0
Организовать вылет на проверке
    #38940279
Фотография FishHook
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но вопрос о бреде и начале грибного сезона в Нижневартовске остается открытым: что за бред ты несёшь?
Рассказывай популярно, что ты пытаешься сгородить?
...
Рейтинг: 0 / 0
Организовать вылет на проверке
    #38940286
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FishHook,
Код: python
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
class Meta(object):
    def __new__(cls, name, bases, dct):
        for key in dct["specials"]:
            dct["__%s__" % key] = dct["exception"]
        return type(name, bases, dct)


class CrazyObj:
    __metaclass__ = Meta
    specials = ["float", "long", "index"]

    def exception(self):
        raise self.e

    def __init__(self, some_exception):
        self.e = some_exception
class MyException(Exception):
    pass
O = CrazyObj(MyException("ddd"))
try:
    if O:  #вот хочу что бы сдесь генерилось исключение (именно моё, которое передавалось CrazyObj при создании)
        print "Not ok"
    a=O*2  # вот здесь я тоже его ожидаю увидеть
except BaseException as e:
    print e.__class__
    print e.message


а пока вывод такой
Код: plaintext
1.
2.
3.
Not ok
<type 'exceptions.TypeError'>  
unsupported operand type(s) for *: 'CrazyObj' and 'int'
...
Рейтинг: 0 / 0
Организовать вылет на проверке
    #38940287
Фотография r u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забавная темка)
...
Рейтинг: 0 / 0
Организовать вылет на проверке
    #38940290
Фотография FishHook
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, допустим, так
Код: python
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
class CrazyObj:

    def exception(self):
        raise self.e

    def __init__(self, some_exception):
        self.e = some_exception

    def __getattr__(self, item):
        self.exception()

    def __nonzero__(self):
        return 0

l_o = CrazyObj(Exception)
print bool(l_o)



Но зачем?????????????????????
...
Рейтинг: 0 / 0
Организовать вылет на проверке
    #38940293
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FishHook, то что доктор прописал, большое спасибо :-)
окончательный вариант такой
Код: python
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
class CrazyObj:
    def __init__(self, some_exception):
        self.e = some_exception
    def __getattr__(self, item):
        raise self.e
    def __nonzero__(self):
        raise self.e
class MyException(Exception):
    pass
O = CrazyObj(MyException("ddd"))


проверяем
Код: python
1.
2.
3.
4.
5.
6.
7.
8.
try:
    a=O
    print "Test if"
    if O:
        print "Not ok"
except BaseException as e:
    print e.__class__
    print e.message


Код: plaintext
1.
2.
3.
Test if
<class '__main__.MyException'>
ddd
Код: python
1.
2.
3.
4.
5.
6.
7.
8.
try:
    a=O
    print "Test operation"
    a=O*2
    print "dd"
except BaseException as e:
    print e.__class__
    print e.message


Код: plaintext
1.
2.
Test operation
<class '__main__.MyException'>
ddd

FishHookНо зачем?????????????????????
интерпретатор пишу ленивых вычислений, что бы не заморачивать пользователя с проверкой некорректных значений вот такой объект и нужен
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Организовать вылет на проверке
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]