Python 字符串/参数操作

标签 python string syntax syntax-error user-input

我有一个函数,它有一个 name1 值,该值是通过 sys.argv.pop() 用户输入获得的,它指示 myconfig.py< 中的哪个参数 使用。作为 Python 的新手,我想知道执行此操作的正确方法是什么,以便我可以正确访问所需的数据。

完成后,我希望参数发挥作用:myconfig.Oink['lower_bound']myconfig.Woof['lower_bound']

> self.do_x(id, myconfig."name1".format(name1)['lower_bound'],
> myconfig."name1".format(name1)['upper_bound'])
>                                                  ^ SyntaxError: invalid syntax
__________________________________________________________________

> myconfig.py
> 
> Oink = dict(lower_bound = 874,upper_bound = 1983,) 

> Woof = dict(lower_bound = 1,upper_bound = 984,)

最佳答案

您可以使用 getattr 来实现此目的:

name1 = sys.argv.pop()

# ...

values = getattr(myconfig, name1)
self.do_x(values['lower_bound'], values['upper_bound'])

请注意 getattr 区分大小写,这意味着 getattr(myconfig, 'Oink') 会产生正确的值,getattr(myconfig, 'oink') 将引发一个 AttributeError


如果你想处理无效值,你可以使用hasattr :

if not hasattr(myconfig, name1):
    raise ValueError('Invalid value {}'.format(name1))

values = getattr(myconfig, name1)
self.do_x(values['lower_bound'], values['upper_bound'])

如果您想使用默认值而不是引发 ValueError,您可以为 getattr 使用 default 关键字参数:

default = dict(lower_bound=20, upper_bound=50)
values = getattr(myconfig, name1, default=default)
self.do_x(values['lower_bound'], values['upper_bound'])

关于Python 字符串/参数操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50614187/

相关文章:

php - 通过 HTML 表单插入数据的 SQL Near 错误

Jquery 终端文本格式化语法,我做错了什么?

ruby - 在 haml 中插入文本 block

Python - Gspread请求错误401

python - 嵌套 if 用于带有模式的变量名称

C++ 字符串不重新分配

java - 在给定情况下使用 StringBuilder 构建字符串的最佳实践是什么?

c++ - 将 std::string 的一部分复制到另一个未初始化的字符串

python - 这个 selenium firefox 配置文件将文件下载到自定义文件夹有什么问题?

python - pyqt QThread阻塞主线程