打印 eval 无法从字符串打印变量

Print eval not working to print variable from string

class ddx:
  micro = ["iron deficiency (late)", "chronic disease (late)", "thalassemias", "sideroblastic anemia", "lead poisoning"],
  normo = ["normo"],
  macro = ["macro"]

anemiaType = random.choice(["micro", "normo", "macro"])
print eval('ddx.' + anemiaType)

假设 random.choice 是“微型”

我希望能够打印 ddx.micro

我知道我可以创建一大堆 if/else 语句来完成此操作,但它看起来非常 clunky/not 超级可读。

有人有什么建议吗?

Nvm 我刚刚意识到我犯了有史以来最愚蠢的 python 3 个错误 - 写 print 而不是 print()

import random
class ddx:
  micro = ["iron deficiency (late)", "chronic disease (late)", "thalassemias", "sideroblastic anemia", "lead poisoning"],
  normo = ["normo"],
  macro = ["macro"]
new=ddx()
anemiaType = random.choice(["micro", "normo", "macro"])
#print(anemiaType)
print(eval('new.'+anemiaType))

这对我有用

当您想使用 eval 时,10 次中有 9 次通常有更安全的方法。 Eval 将 运行 任何任意代码,因此当有更好、更安全的方法时,这绝不是一个好主意。在这种情况下你想访问一个class的属性,所以你可以使用getattr

import random

class ddx:
  micro = ["iron deficiency (late)", "chronic disease (late)", "thalassemias", "sideroblastic anemia", "lead poisoning"],
  normo = ["normo"],
  macro = ["macro"]

anemiaType = random.choice(["micro", "normo", "macro"])
print(getattr(ddx, anemiaType))