На днях озаботился портированием одного своего скрипта на python 3.1.1 c версии 2.5 К чести разработчиков языка всё оказалось весьма и весьма просто. Во-первых сколько-нибудь значительных несовместимостей было не очень много а с другой был предоставлен их полный список с советами как осуществлять портирование на последнюю версию Питона. Я напоролся на проблему с функцией filter() и bytes() (хотя описание последней несовместимости я не нашел). Ну и так по-мелочи — какие-то функции, спокойно работающие со строками стали требовать только bytes, а функции работающие с байтами стали требовать str. Вообще сложилось впечатление что язык стал более типизированным, что несомненно не может не радовать. Как забороть проблему с конвертацией в байты показано на следующем листинге:
def			StrToBytes( String , Encoding ):
	if( sys.version_info[ 0 ] == 2 and sys.version_info[ 1 ] <= 6 ):
		return( String );
	if( sys.version_info[ 0 ] >= 3 ):
		return( bytes( String , Encoding ) );

    Наверно существует более простой способ решить эту проблему, но я его не знаю.

    Вообще войдя в раж я решил портировать свой скрипт на более ранние версии Питона, и на данный момент уперся в версию 2.0.1 (дойдя до неё без особых проблем, ну да у меня и скрипт несложный был), в которой нет необходимой мне библиотеки xml.dom.minidom (которую я наверное заменю SAXом). Вообще в процессе всех этих фокусов несколько раз поразился как у создателей Питона все грамотно получилось. На протяжении почти 10 лет новые возможности постоянно добавлялись, а необходимость серьезной переработки приведшей к несовместимости старых исходников с новым интерпретатором назрела только недавно.