Возможно ли в Python отслеживать и фильтровать функции, вызываемые в строках во время прогона программы? Я хочу добавить приложение sys.setdefaultencoding("utf-8")
, и я хочу установить некоторые защитники для прогнозирования потенциальных проблем с неправильным использованием стандартных функций (например, len
) для обработки таких строк.Функции трассировки, вызываемые в строках Python
1
A
ответ
2
Вы можете заменить встроенную команду:
import __builtin__
real_len = __builtin__.len
def checked_len(s):
... do extra checks ...
return real_len(s)
__builtin__.len = checked_len
+0
Это работает для 'len', но не для других функций. Как избежать проверки строк, где ее законно использовать 'len', потому что мне нужно' len' в байтах (например, вычисление HTTP-заголовков). Существуют переменные и операции (не строковое содержимое), для которых эта проверка не должна срабатывать. Можно настроить эти фильтры вручную. –
Я предполагаю, что, несмотря на советы, которые вы недавно получили о [Опасностей sys.setdefaultencoding ('UTF-8')] (HTTP: // StackOverflow. com/questions/28657010/dangers-of-sys-setdefaultencodingutf-8) (также, [Hack Jinja2 для кодирования с 'utf-8' вместо' ascii'?] (http://stackoverflow.com/q/28642781/ 4014959)), что вы все еще решили использовать его ... –
Разве это не факт, что вам уже нужно начинать внедрять хаки, подобные этим признакам, для вас, что это плохая идея возиться с 'sys.setdefaultencoding()'? Используйте unicode внутри, [переходите Unicode к шаблонам Jinja] (http://jinja.pocoo.org/docs/dev/api/#unicode), и только конвертируйте в/из 'utf-8' на своих границах системы. –
@ PM2Ring Мне нужно исправить http://issues.roundup-tracker.org/issue2550811 ASAP, потому что он блокирует следующий выпуск Roundup и его разработку, а переход на использование unicode внутри выглядит как эпическая задача, которая займет много времени и перерыв существующего механизма шаблонов (TAL) и расширений. –