【发布时间】:2021-07-05 08:21:02
【问题描述】:
我想生成用户可以输入变量名的对象,但我不知道为什么在使用以下代码时会发生 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
但是,如果我删除了 `name',如下所示:
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。
【问题讨论】:
-
尝试打印出你想要执行的字符串。如果这不能告诉您它有什么问题,请将其复制到交互式 Python shell 中。
-
exec('%s = Layer(%d,%d,%d,%s)'%(Name,d1,d2,d3,Name)) 。在这一行中,您使用了 Name 变量 2 次。首先它是“%d”,你给出的名字(字符串)
-
嗨,Brian,如果您的问题得到解答并且您很清楚,请考虑accepting or upvoting
标签: python-3.x class exec customization