坚持尝试...除了...其他逻辑[重复]
Posted
技术标签:
【中文标题】坚持尝试...除了...其他逻辑[重复]【英文标题】:Stuck on Try...Except...Else Logic [duplicate] 【发布时间】:2021-04-13 17:20:20 【问题描述】:我正在尝试遍历文件夹中的文件并检查字符串长度(文件名)是否 >70 或
Schedule RCL 09302009(1 of 2).txt
Schedule RCL 09302009(2 of 2).txt
Schedule RCL 09302010(1 of 2).txt
Schedule RCL 09302010(2 of 2).txt
这是我正在测试的代码。
path = 'C:\\Users\\ryans\\Downloads\\'
all_files = glob.glob(os.path.join(path, "*.txt"))
before = [
'FFIEC CDR Call Schedule RC',
'FFIEC CDR Call Schedule RCL'
]
after = [
'FFIEC CDR Call Schedule RC0',
'FFIEC CDR Call Schedule RCL'
]
for f in all_files:
for b, a in zip(before, after):
if b in f:
try:
if len(f) < 70:
string = f[-13:]
os.rename(f, path + a + string)
except:
if len(f) > 70 & str('(1') in string:
string = f[-21:]
os.rename(f, path + a + '1' + string)
else:
if len(f) > 70 & str('(2') in string:
string = f[-21:]
os.rename(f, path + a + '2' + string)
print('can not find file: ' + f)
运行代码时出现此错误。
Traceback (most recent call last):
File "<ipython-input-15-5614012e41f2>", line 105, in <module>
if len(f) > 70 & str('(2') in string:
TypeError: unsupported operand type(s) for &: 'int' and 'str'
我认为这与此有关:str('(1')
我尝试了 str()
函数和没有;我犯了同样的错误。我在这里错过了什么?
【问题讨论】:
尝试使用and
而不是&
str('(1')
是空操作。
我认为你想要 if/elif/elif 而不是 try/catch
今天肯定学到了一些关于 'and' 与 '&' 的新东西。我认为你是对的......如果......其他......在这里更好。 Try...catch 似乎有点笨拙。现在我知道为什么了。谢谢大家!
【参考方案1】:
关键问题是&
是 Python 中的位运算符。你想做一个布尔值,在 Python 中是 and
该行应为:
if len(f) > 70 and str('(2') in string:
布尔运算符: https://docs.python.org/3/reference/expressions.html#boolean-operations
位运算符: https://docs.python.org/3/reference/expressions.html#unary-arithmetic-and-bitwise-operations
【讨论】:
以上是关于坚持尝试...除了...其他逻辑[重复]的主要内容,如果未能解决你的问题,请参考以下文章
Django ORM:未继承子级的字段和值。对象重复。 (使用Django管理界面)