我想在init.py中添加更多字典,并在变量中设置其名称。但是它不会检测到它的名字。
我的程序:
from StackOverflow import *
number = input("Wich car do you want:")
car = r"Car"+number
print(car["Color"])
print(car["Brand"])
StackOverflow \ __ init __。py:
Car1 = {
"Color": "Bleu",
"Brand": "Aston Martin"
}
Car2 = {
"Color": "Red",
"Brand": "Volvo"
}
我希望它能提供所选汽车的颜色和品牌。 但是我得到这个错误:
Traceback (most recent call last):
File "D:/Users/stanw/Documents/Projecten/Stani Bot/Programma's/StackOverflow/Choose Car.py", line 5, in <module>
print(car["Color"])
TypeError: string indices must be integers
答案 0 :(得分:2)
从Python 3.7开始,您可以在模块上使用getattr
。
import StackOverflow
number = input('Enter a number')
var_name = f'Car{number}'
if hasattr(StackOverflow, var_name):
car = getattr(StackOverflow, var_name)
else:
print('Car not found')
答案 1 :(得分:1)
方法仅在变量位于当前模块中时才有效。要在另一个模块中获取值,可以使用getattr:
import other
print getattr(other, "name_of_variable")
getattr(对象,名称[,默认])
返回对象的命名属性的值。名称必须是 串。如果字符串是对象属性之一的名称, 结果是该属性的值。例如,getattr(x, 'foobar')等同于x.foobar。如果named属性没有 存在,如果提供则返回默认值,否则AttributeError为 提出。
类似:
import StackOverflow
number = input("Wich car do you want:")
car = r"Car"+number
print (getattr(StackOverflow, car))
关于各种“ eval”解决方案的说明:您应谨慎使用eval,特别是如果要评估的字符串来自可能不受信任的来源-否则,您最终可能会删除磁盘或磁盘的全部内容如果您收到了恶意字符串,就会出现类似的情况。
答案 2 :(得分:-1)
尝试更改:
car = r"Car"+number
收件人:
car = globals()["Car" + number]
或:
car = eval("Car"+number)