В сценарии Python я хотел протестировать разные строки HTML, используя одну и ту же логику. Мой подход заключался в циклическом переборе диапазона для создания нескольких экземпляров строковых переменных HTML, но он работал не так, как ожидалось.
# DO NOT DO THIS for i in range(1, 5): html = f"html{i}" soup = BeautifulSoup(html, "html.parser") print('----', soup)
Поведение, которое я наблюдал, связано со способом интерпретации форматированной строки f"html{i}". В моем коде f"html{i}" оценивается как литералы "html1", "html2", "html3" и "html4", а не содержимое переменных с именами html1, html2 и т. д.
Python не заменяет автоматически f"html{i}" значением переменной, имя которой создается динамически, например html1 или html2. Вместо этого он оценивает строку как фиксированный шаблон, состоящий из префикса «html», за которым следует значение i.
Если я хочу использовать содержимое предопределенных переменных html1, html2 и т. д., мне нужно явно получить их значения, например, используя словарь для сопоставления имен строк с их фактическим содержимым.
Вот пример, иллюстрирующий это:
from bs4 import BeautifulSoup # Define the variables html1 = "Test 1" html2 = "Test 2" html3 = "Test 3" html4 = "Test 4" # Store them in a dictionary for easy access html_dict = { "html1": html1, "html2": html2, "html3": html3, "html4": html4 } # Iterate and process each html content for i in range(1, 5): key = f"html{i}" html = html_dict[key] soup = BeautifulSoup(html, "html.parser") print('----', soup)
Определить переменные:
Словарь для поиска переменных:
Перебор ключей:
Разбор и печать:
---- Test 1 ---- Test 2 ---- Test 3 ---- Test 4
Этот подход динамически получает доступ к содержимому переменных на основе индекса итерации и правильно печатает предполагаемое содержимое.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3