前两天在写python代码的时候,发现了一个问题。因为要使用email模块,使用

了其中一项导入语句:from email.mime.text import MIMEText,在python2.5下

面运行的很正常,可是到python2.4下面却运行失败,说是导入库失败。最后找

来找去,发现在低版本下面可以用from email.MIMEText import MIMEText进行

代替。而且,这样做的话也是兼容高版本的。看了一下里面的模块,发现在

python2.5下面:

Python 2.5.2 (r252:60911, Jan 8 2009, 12:17:37)

[GCC 4.3.2] on linux2

Type "help", "copyright", "credits" or "license" for more information.

>>> import email

>>> dir(email)

['Charset', 'Encoders', 'Errors', 'FeedParser', 'Generator', 'Header',

'Iterators', 'LazyImporter', 'MIMEAudio', 'MIMEBase', 'MIMEImage',

'MIMEMessage', 'MIMEMultipart', 'MIMENonMultipart', 'MIMEText',

'Message', 'Parser', 'Utils', '_LOWERNAMES', '_MIMENAMES', '__all__',

'__builtins__', '__doc__', '__file__', '__name__', '__path__',

'__version__', '_name', 'base64MIME', 'email', 'importer',

'message_from_file', 'message_from_string', 'mime', 'quopriMIME',

'sys']

而在python2.4下面:

Python 2.4.4 (#2, Apr 5 2007, 20:11:18)

[GCC 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)] on linux2

Type "help", "copyright", "credits" or "license" for more information.

>>> import email

>>> dir(email)

['__all__', '__builtins__', '__doc__', '__file__', '__name__',

'__path__', '__version__', 'message_from_file', 'message_from_string']

差别还是蛮大的。

最近很让人郁闷的一件事情是,python的上下兼容性做得并不好。许多版本之间

并不相通。python2.4和2.5的小版本之间差别都如此大,更不要说大版本了。前

几天有同事问,现在python3.0为什么不用啊,不是不用,用的话许多东西都要

重新改写,而且许多第三方库现在都是针对python2.4/2.5的,很少有针对3.0的,

第三方库升不上去,别的地方肯定就不好升了。再如django,每一件小版本之间

的升级,也会导致你的代码重写,如0.96到1.0之间,代码不能拿过来就用,还

得改来改去。虽然说现在3.0代码更严谨了,而且不像c和c++那样,背上历史的

包袱,但是,没有向下兼容性,还是容易加大代码维护工作量。哎,说到这里,

真是让人既爱且恨啊。

简谈python的向下兼容性问题

阅读(2663) | 评论(1) | 转发(0) |

python兼容性怎么样_简谈python的向下兼容性问题相关推荐

  1. python变量标识符_简谈-Python的注释、变量类型、标识符及关键字

    在Python程序中,要想支持中文输出,则要在代码前面添加 标识符:开发人员在程序中自定义的一些符号和名称 标示符是自己定义的,如变量名 .函数名等 标识符的规则: 标示符由字目.下划线和数字组成,且 ...

  2. python编写函数_浅谈Python 函数式编程

    匿名函数lambda表达式 什么是匿名函数? 匿名函数,顾名思义就是没有名字的函数,在程序中不用使用 def 进行定义,可以直接使用 lambda 关键字编写简单的代码逻辑.lambda 本质上是一个 ...

  3. python float 精度_浅谈Python里面小数点精度的控制

    要求较小的精度 round()内置方法 这个是使用最多的,刚看了round()的使用解释,也不是很容易懂.round()不是简单的四舍五入的处理方式. For the built-in types s ...

  4. python 迭代器协议_浅谈Python中的生成器和迭代器

    迭代器 迭代器协议 对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么返回一个异常来终止本次迭代.(只能往前走,不能往后退!) 迭代器对象 遵循了(实现了)迭代器协议的对象.(对象内 ...

  5. python static方法_浅谈python 类方法/静态方法

    1.类方法 类方法是从属于"类对象"的方法.类对象可以通过装饰器@classmethod来定义,具体格式如下: @classmethod def 类方法名(cls [, 形参列表] ...

  6. python表格对齐_浅谈python str.format与制表符\t关于中文对齐的细节问题

    写了一个练手的爬虫...在输出的时候出现了让人很不愉♂悦的问题 像这样: 令人十分难受啊! #------------------------------------------ 在此之前先说一下py ...

  7. python未定义_浅谈Python程序的错误:变量未定义

    Python程序的错误种类 Python程序的错误分两种.一种是语法错误(syntax error).这种错误是语句的书写不符合Python语言的语法规定.第二种是逻辑错误(logic error). ...

  8. python hasattr函数_浅谈python中的getattr函数 hasattr函数

    hasattr(object, name) 作用:判断对象object是否包含名为name的特性(hasattr是通过调用getattr(ojbect, name)是否抛出异常来实现的). 示例: & ...

  9. python制表符对齐_浅谈python str.format与制表符\t关于中文对齐的细节问题

    写了一个练手的爬虫...在输出的时候出现了让人很不愉♂悦的问题 像这样: 令人十分难受啊! #------------------------------------------ 在此之前先说一下py ...

最新文章

  1. 机器学习--多标签softmax + cross-entropy交叉熵损失函数详解及反向传播中的梯度求导
  2. 使用配置hadoop中常用的Linux(ubuntu)命令
  3. SDUT2389Ballot evaluation
  4. zabbix通过JMX监控Tomcat及一些报错
  5. java学习(22):if语句
  6. C++学习笔记(14) static_cast 与 dynamic_cast
  7. 轻量级网页安全漏洞扫描工具-Wapiti
  8. Doc命令行执行php中文乱码问题
  9. 服务器系统试用,“雪豹”安装篇(3)
  10. Microsoft Excel 教程 如何在 Excel 中隐藏或显示行或列?
  11. tp6 时间戳查询 自动转换
  12. 国内最长的地铁投影画廊在上海地铁诞生
  13. Juniper防火墙常用命令
  14. 【操作系统】30天自制操作系统--(1)虚拟机加载最小操作系统
  15. Oracle 11g R2 RSF(Recurive Subquery factoring)
  16. 服务器和客户端信息的获取
  17. 操作系统学习笔记(5. 文件管理)
  18. 经验分享给你!小伙利用业余时间听歌赚钱,一个月挣了6000?
  19. 高效的HPPC java库
  20. P8大佬出书了!送送送!

热门文章

  1. html怎么能把div宽度占满,css如何让div边框不占宽度?
  2. [WorldWide_D幻想乡♂模拟赛][JZOJ4599]西行妖
  3. RFID在珠宝盘库管理中的应用
  4. 分享几款流行的医疗机器人
  5. java hprof文件_mat工具MemoryAnalyzer进行分析java内存溢出hprof文件
  6. 新托福写作:活用简单词
  7. 厦大考研:复习过程中如何克服拖延症
  8. IMX8M系列 yocto编译镜像及demo编译(MYD-JX8MX)
  9. MySQL事务隔离级别是怎么实现的?
  10. Segmentation fault: 11 python mtcnn