运行report.py遇SyntaxError:函数参数类型注解处语法错误求助
语法错误排查方案
问题根源
你代码里用了两个仅高版本Python支持的语法特性,而运行环境的Python版本太低:
file_name: str这种类型注解需要Python 3.5及以上支持f'{sys.path[0]}/{file_name}'这种f-string格式化需要Python 3.6及以上支持
移除类型注解后错误跳到下一行,正好是f-string的位置,完全符合版本不兼容的表现。
解决办法
方案1:升级Python版本
直接把Python升级到3.6或更高版本(推荐3.8及以上,稳定性和兼容性更好),升级后无需修改代码就能正常运行。
方案2:修改代码适配旧版本
如果没法升级Python,就把代码改成旧版本兼容的写法:
- 删掉函数参数的类型注解,把:
改成:def create_file_if_not_exist(file_name: str):def create_file_if_not_exist(file_name): - 把所有f-string替换成
str.format()写法,比如:
改成:f'{sys.path[0]}/{file_name}''{}/{}'.format(sys.path[0], file_name)
修改后的代码片段示例
import logging import sys import os.path as path import csv def set_logging(): logging.basicConfig( level=logging.INFO, format='%(asctime)s %(levelname)s %(message)s', handlers=[ logging.FileHandler("debug.log"), logging.StreamHandler()]) def create_file_if_not_exist(file_name): if (not path.exists('{}/{}'.format(sys.path[0], file_name))): logging.info('{}/{} not exist.'.format(sys.path[0], file_name)) data_file = open('{}/{}'.format(sys.path[0], file_name), 'w+') csv_writer = csv.writer(data_file) values = ["Date", "Test Level","Total","Fail","Pass","Elapsed","Jenkins Build","Pass%","Build URL"] csv_writer.writerow(values) logging.info("Header added to the file") data_file.close() logging.info('{}/{} created.'.format(sys.path[0], file_name)) if __name__ == "__main__": try: set_logging() logging.info("---- Fetching csv file ----") file_name = "report_FT.csv" create_file_if_not_exist(file_name) data_file = open('{}/{}'.format(sys.path[0], file_name), 'a') csv_writer = csv.writer(data_file) # 补充try块的异常处理,避免后续语法错误 except Exception as e: logging.error("Error occurred: {}".format(e)) finally: if 'data_file' in locals(): data_file.close()
内容的提问来源于stack exchange,提问作者Sharon John D'Souza
相关产品推荐
相关产品推荐

