在python3中使用自定义字符串执行

布赖恩

我想生成用户可以输入变量名的对象,但是我不知道为什么在我使用以下代码时会发生 Nameerror:

class Layer: 
    def __init__(self,Diameter,Thickness,Porosity,Name):
        self.d = Diameter
        self.t = Thickness
        self.phi = Porosity
        self.name = Name
    
Name = input('Name of the layer:    ')
d1 = 1
d2 = 2
d3 = 3
exec('%s = Layer(%d,%d,%d,%s)'%(Name,d1,d2,d3,Name))

如果我有这样的输入

Name of the layer:    Trial

然后出现如下错误:

NameError: name 'Trial' is not defined

我尝试过其他一些方法,例如:

class Layer:

    def __init__(self,Diameter,Thickness,Porosity,Name):
        self.d = Diameter
        self.t = Thickness
        self.phi = Porosity
        self.name = Name
        
Name = input('Name of the layer:    ')
name = Name
d1 = 1
d2 = 2
d3 = 3
exec('%s = Layer(%d,%d,%d,%s)'%(Name,d1,d2,d3,name))

即使是这样的事情也失败了:

class Layer
    def __init__(self,Diameter,Thickness,Porosity,Name):
        self.d = Diameter
        self.t = Thickness
        self.phi = Porosity
        self.name = Name
    
Name = input('Name of the layer:    ')
name = 'Trial2'
d1 = 1
d2 = 2
d3 = 3
exec('%s = Layer(%d,%d,%d,%s)'%(Name,d1,d2,d3,name))

并返回 NameError: name 'Trial2' is not defined

但是,如果我删除了“名称”,如下所示:

class Layer:

def __init__(self,Diameter,Thickness,Porosity):
    self.d = Diameter
    self.t = Thickness
    self.phi = Porosity
    self.name = Name
    
Name = input('Name of the layer:    ')
d1 = 1
d2 = 2
d3 = 3
exec('%s = Layer(%d,%d,%d)'%(Name,d1,d2,d3))

可以生成对象。但它随后失去了属性name

扬·维拉莫夫斯基

替换execwithprint给出了错误的提示:

print('%s = Layer(%d,%d,%d,%s)'%(Name,d1,d2,d3,Name))

Trial = Layer(1,2,3,Trial)
                    ^^^^^ here is the problem

但你真正需要的是

Trial = Layer(1,2,3,"Trial")

因为最后一个参数应该是一个字符串。否则,Python 将查找名为 的变量Trial,但找不到,因此会引发NameError. 转换回您的代码,这意味着在第二次出现的 周围添加引号Name

exec('%s = Layer(%d,%d,%d,"%s")'%(Name,d1,d2,d3,Name))

这样做的原因是虽然Name是一个字符串,但您可以使用它来创建一个代码片段。此代码段必须是需要添加引号的有效 Python 语法。Name一旦您将其传递到字符串格式中,原始类型就会消失。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将JSON文件读入自定义类型结构中,我需要在需要类型字符串而不是自定义类型的函数中使用键

在Golang中使用字符串拆分的自定义解组

Android:如何在自定义首选项的属性中使用xml文件中的字符串资源?

在字符串中使用自定义标签会引发“字段完整性异常”

如何在python3中使用错误消息和状态代码创建自定义异常

在python3中使用带有beautifulsoup的子字符串查找html标签

在MySQL中使用自定义字符串创建别名列

在C ++中使用自定义字符串类作为映射键值

在javascript中使用自定义条件拆分字符串(不重复)

在Python3中使用列表格式化字符串

串联字符串中的自定义因子级别

Python中自定义类的字符串格式

Spark Scala中的自定义字符串

如何在flask的模板文件中使用python3自定义函数?

来自字符串的Python3 Scapy自定义有效载荷

如何在python3中使用搜索从主字符串获取空格前后的子字符串?

如何根据自定义参数在表名称中使用类似于Python的字符串格式查询Google Data Studio中的bigquery表?

使用Python中的自定义字符串从数据框日期列返回会计季度

Go中的自定义字符串类型

Domino网址中的自定义查询字符串

在Python中创建自定义字符串类型

如何在Java中使用自定义注释传递字符串和对象

PHP解析字符串中的自定义字符

对字符串使用自定义比较器

使用自定义字符串定义符号变量

如何在自定义 R 函数中使用文本字符串作为变量

Python 中的自定义字符串插值

SQLite 中的自定义 ORDER BY 字符串日期

使用 python3 从字符串中删除定义的字符