【问题标题】:TypeError: object of type 'NoneType' has no len() when iterating through filesTypeError:“NoneType”类型的对象在遍历文件时没有 len()
【发布时间】:2017-07-09 12:10:48
【问题描述】:

我正在尝试迭代两个文本文件。我有两个文本文件,一个用于“用户名”,另一个用于“密码”。

当我使用带有单个参数的函数时它可以工作。 here's the code 但在使用 2 个或多个参数时则不然。

这是我的代码:

import os
import time
import getpass
from selenium import webdriver
from selenium.webdriver.common.keys import Keys


def Quora_bot():

    username = None
    password = None

    chromedriver  = 'F:\All  Folders\chromedriver\shit.exe'

#Uncomment this block if you don't want images to load(makes the procss a little bit faster)
    '''
    chromeOptions = webdriver.ChromeOptions()
    prefs = {"profile.managed_default_content_settings.images":2}
    chromeOptions.add_experimental_option("prefs",prefs)
    browser = webdriver.Chrome(chromedriver, chrome_options=chromeOptions)
    '''

    browser = webdriver.Chrome(chromedriver)
    browser.get("http://www.quora.com")       # Quora home page
    time.sleep(10)

    # Logging into Quora
    form = browser.find_element_by_class_name('regular_login')
    email = form.find_element_by_name("email")
    password = form.find_element_by_name("password")
    button_element = browser.find_element_by_xpath("//*[@value='Login']")
    email.send_keys(username)
    password.send_keys(password)


with open('newfile.txt') as u:
      for line in u:
        rr = line


with open('password.txt') as p:
     for linee in p:
       pp = linee

Quora_bot()
username = rr
password = pp

我得到了这个错误。

    F:\Python_Installer\python.exe C:/Users/user/PycharmProjects/Quora_Bot/westing.py
Traceback (most recent call last):
  File "C:/Users/user/PycharmProjects/Quora_Bot/westing.py", line 45, in <module>
    Quora_bot()
  File "C:/Users/user/PycharmProjects/Quora_Bot/westing.py", line 32, in Quora_bot
    email.send_keys(username)
  File "F:\Python_Installer\lib\site-packages\selenium\webdriver\remote\webelement.py", line 348, in send_keys
    {'text': "".join(keys_to_typing(value)),
  File "F:\Python_Installer\lib\site-packages\selenium\webdriver\common\utils.py", line 150, in keys_to_typing
    for i in range(len(val)):
TypeError: object of type 'NoneType' has no len()

Process finished with exit code 1

【问题讨论】:

  • 您没有包含有错误的代码。编辑您的问题并包含相关部分。
  • 好的,我会发布完整的代码
  • 不要覆盖 Python 关键字和内置函数,如 for, object
  • 好的,我会试试的
  • 我想要的只是迭代两个文件

标签: python python-3.x


【解决方案1】:

所以我们最终不会在 cmets 中拥有所有内容,让我为您总结一下

  1. 不要覆盖 inbuild 关键字,例如 forobject

  2. 您的 for_game()' function which is (i guess) should resetletterandanimal` 不会重置全局变量,而只会重置本地变量。所以这是没有意义的,因为它最终什么也没做。

  3. 假设您在我们看不到的地方定义了val,请确保它被定义为一个对象,该对象是一个length 属性,如stringlist(我猜大多数/全部可迭代对象有。目前它似乎是None,所以要么将其定义为None,要么将其设置为没有return 语句的函数。

  4. 我认为您的 with 语句也不会按照您希望的方式工作,因为您从不 read 文件的内容,而只保留对象。你需要用content = file.read()阅读它

但同样没有必要的代码,我们无法再为您提供帮助。

【讨论】:

  • 关于你的第四点,即使他不使用readreadlines 读取文件,这也可以。如果他只想打印文件的内容,这应该没问题。但是如果他想存储它,那么它将始终存储最后一行。在那种情况下,正如你所说,他必须使用read。只是想添加此说明。
【解决方案2】:

问题是您将 None-Type 对象发送到输入。 起初你打电话给Quora_bot() 并在那里定义:
username = None
password = None

然后您尝试将它们作为键发送到输入:
email.send_keys(username)
password.send_keys(password)

只有这样你才能定义它们:

Quora_bot()
username = rr
password = pp

所以它给你这个错误:

  for i in range(len(val)):
TypeError: object of type 'NoneType' has no len()

我遇到了同样的问题,因为我没有定义 .env 文件的路径,而且我的 env-variables 有 None-Type:

from selenium import webdriver
from selenium.webdriver.remote.webdriver import WebElement
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.service import Service
import dotenv
import os
import time

dotenv.load_dotenv()

MY_EMAIL = os.getenv('my-email')
MY_PASSWORD = os.getenv('my-password')
LINK = 'https://www.linkedin.com/jobs/search/?f_LF=f_AL&geoId=102257491&keywords=python%20developer&location=London%2C%20England%2C%20United%20Kingdom&redirect=false&position=1&pageNum=0'
service = Service('C://Development/chromedriver.exe')
driver = webdriver.Chrome(service=service)

driver.get(LINK)
sigh_in: WebElement = driver.find_element(By.CLASS_NAME, 'nav__button-secondary')
sigh_in.click()
time.sleep(5)
username_input: WebElement = driver.find_element(By.ID, 'username')
username_input.click()

username_input.send_keys(MY_EMAIL)
password_input: WebElement = driver.find_element(By.ID, 'password')
password_input.send_keys(MY_PASSWORD)
sigh_in: WebElement = driver.find_element(By.CLASS_NAME, 'btn__primary--large')
sigh_in.click()

输出:

  Traceback (most recent call last):
  File "C:/Users/T3600/Desktop/PycharmProjects/job-applying/main.py", line 25, in <module>
    username_input.send_keys(MY_EMAIL)
  File "C:\Users\T3600\Desktop\PycharmProjects\job-applying\venv\lib\site-packages\selenium\webdriver\remote\webelement.py", line 541, in send_keys
    {'text': "".join(keys_to_typing(value)),
  File "C:\Users\T3600\Desktop\PycharmProjects\job-applying\venv\lib\site-packages\selenium\webdriver\common\utils.py", line 148, in keys_to_typing
    for i in range(len(val)):
TypeError: object of type 'NoneType' has no len()

【讨论】:

    猜你喜欢
    • 2016-03-18
    • 2021-03-03
    • 2015-07-30
    • 1970-01-01
    • 2018-08-14
    • 2016-06-06
    • 1970-01-01
    • 2018-06-11
    • 2021-06-14
    相关资源
    最近更新 更多