代码之家  ›  专栏  ›  技术社区  ›  doplano

用于python中函数的输入参数的if-else语句

  •  0
  • doplano  · 技术社区  · 2 年前

    我运行bash脚本 my_file.sh 在python文件中,如下所示:

    import subprocess
    
    def rest_api():
    
        params = {
            'query': 'indepedence day',
            'formats': '["NEWSPAPER"]',
        }
    
        subprocess.call(['bash', 
                         'my_file.sh',
                         f'QUERY={params.get("query")}',
                         f'DOC_TYPE={params.get("formats")}',
                         f'LANGUAGE={params.get("lang")}', # returns None!
                        ])
    
    if __name__ == '__main__':
        rest_api()
    

    我在中的几个输入参数 subprocess.call 通常不存在于词典中 params={} (此处我提供 f'LANGUAGE={params.get("lang")}' 作为一个示例)。我在中处理这种不可用性 my_file.sh 用某些东西初始化,例如:

    if [ -z "$LANGUAGE" ]; then LANGUAGE="${LANGUAGE:-[]}"; fi
    

    我想要的是应用某种 if else 中的声明 subprocess.call 功能与此逻辑:

    如果 params.get("lang") None ,甚至不要将其作为bash文件的输入发送,例如,将其视为我从未为其提供过此类输入 my_file.sh .

    因此,我试着这样重写我的代码:

    subprocess.call(['bash', 
                             'my_file.sh',
                             f'QUERY={params.get("query")}',
                             f'DOC_TYPE={params.get("formats")}',
                             if params.get("lang"): f'LANGUAGE={params.get("lang")}', # syntax Error
                            ])
    

    哪个错了我得到以下 invalid syntax error :

    Traceback (most recent call last):
      File "nationalbiblioteket_logs.py", line 13, in <module>
        from url_scraping import *
      File "/home/xenial/WS_Farid/DARIAH-FI/url_scraping.py", line 17, in <module>
        from utils import *
      File "/home/xenial/WS_Farid/DARIAH-FI/utils.py", line 53
        if params.get("lang"): f'LANGUAGE={params.get("lang")}',
         ^
    SyntaxError: invalid syntax
    

    我对申请有错误的理解吗 如果其他 语句,或者有更简单或更干净的方法吗?

    干杯

    1 回复  |  直到 2 年前
        1
  •  2
  •   Barmar    2 年前

    您可以在调用时指定默认值 .get() ,所以使用一个空字符串。

    f'LANGUAGE={params.get("lang", "")}'
    
        2
  •  0
  •   Barmar    2 年前

    如果你不想要 LANGUAGE= 论点 完全 当没有提供值时,您需要动态地构建列表。

        cmd = ['bash', 
               'my_file.sh',
               f'QUERY={params.get("query")}',
               f'DOC_TYPE={params.get("formats")}']
        if (lang := params.get("lang")) is not None:
            cmd += [f'LANGUAGE={lang}']
        
        subprocess.call(cmd)