Уведомления

Группа в Telegram: @pythonsu

#1 Март 21, 2012 11:19:53

Alexey1987
От:
Зарегистрирован: 2012-03-21
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Макросы, как в С++

Здравствуйте, есть-ли в Python функции/инструкции/etc которые возвращают номер строки, имя функции, имя файла из которого вызвались?
Как __LINE__ __PRETTY_FUNCTION__ __FILE__ в С++

И соответсвенно макросы в стиле С++-шного #DEFINE
(я понимаю, что питон - язык без понятия компиляции, но мало-ли, вдруг есть средства)
В общем случае надо сделать след штуку: (привожу аналог на С++)

void foo(const string &func, const string &file, int line, const string &msg)
{
cout << func << ‘ ’ << file << ‘ ’ << line “: ” << msg << endl;
}

#define DOPARSE(WHAT) foo(__PRETTY_FUNCTION__, __FILE__, __LINE__, WHAT)



Отредактировано (Март 21, 2012 11:30:57)

Офлайн

#2 Март 21, 2012 19:28:20

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Макросы, как в С++

Офлайн

#3 Март 22, 2012 06:27:10

Alexey1987
От:
Зарегистрирован: 2012-03-21
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Макросы, как в С++

doza_and - спасибо!
а с #define возможно что-нибудь намудрить, или все-таки нет?



Офлайн

#4 Март 22, 2012 19:28:07

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Макросы, как в С++

#define в питоне нету. Однако попробуйте придумать такой define который невозможно или сложно представить другими средствами питона. Тогда и можно будет обсуждать этот вопрос.
А информацию которую вы хотели получить макросом легко получите кодом

1/0
или

import inspect
def tr(msg):
print __file__,inspect.stack()[1][0].f_lineno,msg



Отредактировано (Март 22, 2012 19:41:52)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version