Hay un código que rastrea la web y encuentra artículos sobre Python y muestra sus nombres y enlaces.

El problema es si / de lo contrario, si usa pestañas y un punto y coma para separar, entonces todo funciona. Pero si escribe if / else en una línea, y el operador 'continue' será el cuerpo para else, entonces no funcionará, refiriéndose a un error de sintaxis.

Error de sintaxis: sintaxis invalida

def habr_python_articles():

pageid = 1

headline_link_dict = {
    }
    for pageid in range(1, 10):
        url = 'https://habr.com/en/all/page%d/' % pageid
        response = requests.get(url)
        soup = BeautifulSoup(response.text, 'html.parser')
        for headline_tag in soup.findAll('a', {'class': 'post__title_link'}):
        result = str(headline_tag.contents).lower().find('python')
        # TODO if else continue one line statement
        #print(str(headline_tag.contents) + '\n\t' + headline_tag['href']) if result > 0 else continue
        if result > 0:
            headline_link_dict[str(headline_tag.contents)] = headline_tag['href']
        else:
            continue
return headline_link_dict

Aunque, si en lugar de continuar escribe algo más, por ejemplo, imprime algo o acción matemática, entonces todo funciona. ¿Hay algo que me estoy perdiendo, o es algo que necesito recordar y dejar?

0
Yun HaveTo 28 oct. 2019 a las 21:36

1 respuesta

La mejor respuesta

Porque continue es una declaración, no una expresión.

x = foo if bar else baz

Está destinado a producir un valor y luego vincular x a ese valor. Para que eso sea posible, foo, bar y baz deben ser cosas que puedan evaluarse (expresiones).

¿Qué debería ser x en el caso de

x = foo if False else continue?

Derecho...

3
actual_panda 28 oct. 2019 a las 18:51