Openpyxl python3项目,其中TypeError:类型为';非类型';不可编辑,添加异常不会';好像不行

Openpyxl python3项目,其中TypeError:类型为';非类型';不可编辑,添加异常不会';好像不行,python,openpyxl,Python,Openpyxl,我遇到了“TypeError:类型为'NoneType'的参数不可编辑,添加一个异常似乎不起作用”的错误,我在这里的其他地方看到过,并且从其他答案中发现,这是由于循环返回一个None值,但添加一个None异常不起作用,我看不出还有其他方法可以这样做 我将openpyxl与Python3一起使用,并且A列中的主题通过另一个项目更新,因此可以有0到多行(我在脚本开始时将它们全部解合并)。我需要搜索J列中每个项目的所有行,以查找要复制到另一列的日期,并且由于第2列对于已更新的行是空的,因此我使用带有i

我遇到了“TypeError:类型为'NoneType'的参数不可编辑,添加一个异常似乎不起作用”的错误,我在这里的其他地方看到过,并且从其他答案中发现,这是由于循环返回一个None值,但添加一个None异常不起作用,我看不出还有其他方法可以这样做

我将openpyxl与Python3一起使用,并且A列中的主题通过另一个项目更新,因此可以有0到多行(我在脚本开始时将它们全部解合并)。我需要搜索J列中每个项目的所有行,以查找要复制到另一列的日期,并且由于第2列对于已更新的行是空的,因此我使用带有if语句的for循环将空行添加到数组中,以便稍后删除

所有不是空的行,我使用else语句在tempList中计算该项目中有多少空行,然后for loop将myStringTest设置为列J值,这样我就可以搜索我想要的文本-如果我找到它,我想将文本的一部分(日期)复制到另一列-我现在只有print('test')

for i in range(2, sheet.max_row + 1):
if sheet.cell(row=i, column=1).value == None:
    print('This row has nothing in it')
    arrayForDeletion2.append(i)
else:
    tempList = 1
    x = i
    while sheet.cell(row=x+1, column=1).value == None:
        tempList += 1
        x += 1
        if tempList >30:
            break
    print(i)
    print(tempList)
    for y in range(i, i+tempList):
        myStringTest = (sheet.cell(row=i, column=10).value)
        if 'Original' in myStringTest and not None:
            print('test')
        i += 1

>>>Traceback (most recent call last):
  File "main.py", line 113, in <module>
  if 'Original' in myStringTest and not None:
  TypeError: argument of type 'NoneType' is not iterable
适用于范围内的i(2,sheet.max_行+1):
如果sheet.cell(行=i,列=1)。值==无:
打印('此行中没有任何内容')
ArrayForDelete2.追加(i)
其他:
圣殿骑士=1
x=i
而sheet.cell(行=x+1,列=1)。值==无:
圣堂武士+=1
x+=1
如果圣堂武士>30:
打破
印刷品(一)
印刷品(圣殿骑士)
对于范围内的y(i,i+圣殿骑士):
myStringTest=(sheet.cell(行=i,列=10).value)
如果myStringTest中的“原始”而不是“无”:
打印(‘测试’)
i+=1
>>>回溯(最近一次呼叫最后一次):
文件“main.py”,第113行,在
如果myStringTest中的“原始”而不是“无”:
TypeError:类型为“NoneType”的参数不可编辑
因此A2可能有6个更新行,J4、J5和J7各有一个字符串,上面写着“原始目标日期:XX/XX/XX”-我希望在if语句中识别出这一点,如果是,则只将日期复制到另一列。如果没有字符串,则什么也不做

这可能不是很清楚,抱歉,但我对python还是相当陌生的,我已经到处寻找答案,但无法解决这个问题。非常感谢你的帮助。谢谢。

如果
表单元格(r,c).value
返回
,您将在无中测试
'Original',在
中有效地
。由于隐式转换(从
)不可用,python会抛出一个错误。您已经尝试使用
和None
捕获此代码,但此代码未按预期方式进行评估。尝试以下操作,您将得到相同的错误:

p = None
if 'test' in p:
   print(p)
None
复选框移到
中的
之前的单独语句中,可以解决此问题。Python会引发错误,因此您的应用程序可以执行回退代码来纠正意外行为或通知用户错误输入。如果要在本地捕获并处理它,请使用try/except块:

p = None
try:
    if 'lol' in p:
        print('p')
    else:
        print('none')
except TypeError:
    print('Code to be executed if p is None goes here.')
顺便说一下,下面打印的是
p
,因为
notnone
的计算结果总是
True
。您需要一个显式的
myStringTest不是None
,其中
is
关键字触发比较

p = None
if not None:
    print('p')
else:
    print('none')
最后是一项建议。语义上,
x==None
测试x是否等同于
None
对象

但是只有一个
None
对象,即
None
对象。因此,您要执行的测试使用is关键字:
x is None
,它检查x和None是否引用同一对象


这有什么关系?嗯,部分原因是风格。这导致了类似这样的讨论。但它的一部分是功能性。关于可读性的评论,关于酷边缘案例的评论:
!=|==使用类的
\uuuu eq\uuu()
方法,您不知道它是如何实现的。如果我想知道
x
y
是否引用同一个对象,
is
保证正确的行为。

如果myStringTest!=myStringTest中的“None”和“Original”:
请尝试此操作。
如果myStringTest中的“Original”和“None”:
没有任何意义这很有效,谢谢。干杯,两位,现在知道了,看看我做错了什么。谢谢SambalMinion-真的很有帮助,现在把它整理好了。谢谢为语义的东西额外的链接,也将有一个通读。