python – 为什么使用’eval’是一种不好的做法?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 为什么使用’eval’是一种不好的做法?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1276字,纯文字阅读大概需要2分钟。
内容图文
![python – 为什么使用’eval’是一种不好的做法?](/upload/InfoBanner/zyjiaocheng/717/8f54d5733dce45b5876dce6de04fe39a.jpg)
我正在使用以下课程轻松存储我的歌曲数据.
class Song:
"""The class to store the details of each song"""
attsToStore=('Name', 'Artist', 'Album', 'Genre', 'Location')
def __init__(self):
for att in self.attsToStore:
exec 'self.%s=None'%(att.lower()) in locals()
def setDetail(self, key, val):
if key in self.attsToStore:
exec 'self.%s=val'%(key.lower()) in locals()
我觉得这比写出if / else块更具扩展性.然而,eval似乎被认为是一种不好的做法并且使用起来不安全.如果是这样,任何人都可以向我解释为什么并告诉我一个更好的方法来定义上面的类?
解决方法:
是的,使用eval是一种不好的做法.仅举几个原因:
>几乎总有一种更好的方法
>非常危险和不安全
>使调试变得困难
>慢
在您的情况下,您可以使用setattr:
class Song:
"""The class to store the details of each song"""
attsToStore=('Name', 'Artist', 'Album', 'Genre', 'Location')
def __init__(self):
for att in self.attsToStore:
setattr(self, att.lower(), None)
def setDetail(self, key, val):
if key in self.attsToStore:
setattr(self, key.lower(), val)
编辑:
在某些情况下,您必须使用eval或exec.但它们很少见.在你的情况下使用eval肯定是一个坏习惯.我强调不好的做法,因为eval和exec经常在错误的地方使用.
编辑2:
看起来有些人不同意eval在OP情况下“非常危险且不安全”.对于这个特定情况可能也是如此,但一般情况下并非如此.问题是一般性的,我列出的原因也适用于一般情况.
编辑3:
重新排序第1点和第4点
内容总结
以上是互联网集市为您收集整理的python – 为什么使用’eval’是一种不好的做法?全部内容,希望文章能够帮你解决python – 为什么使用’eval’是一种不好的做法?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。