使用 Bisect 模块的线性列表插入算法中忽略了 Try-Except 子句 (Python)
Try-Except Clause Ignored in Linear List Insertion Algorithm Using Bisect Module (Python)
我正在尝试使用 input()
以及 Python 中 bisect
模块的 bisect()
和 insort()
函数将元素插入到线性列表中3.7.为了只接受整数输入,我尝试添加一个 try-except 子句(如对 的回答中所建议的)为:
import bisect
m=[0,1,2,3,4,5,6,7,8,9]
print("The list is:", m)
item=input("Enter element to be inserted:")
try:
item=int(item)
except ValueError:
print("Invalid!")
ind=bisect.bisect(m, item)
bisect.insort(m, item)
print("Item inserted at index:", ind)
print("List after insertion:", m)
我希望 Python 在输入浮点数时捕获异常,但它忽略了 try-except 子句并显示如下:
ind=bisect.bisect(m, item)
TypeError: '<' not supported between instances of 'str' and 'int'
可能是什么问题?
编辑:
将 except ValueError
更改为 except TypeError
并输入“5.0”时,我收到了 ValueError:
item=int(item)
ValueError: invalid literal for int() with base 10: '5.0'
问题是,当您使用 try
/except
子句捕获错误时,您没有做任何事情来确保 item
实际上是 int
.
更合理的做法是循环直到输入可以转换为int
,例如:
import bisect
m = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print("The list is:", m)
# : loop until the input is actually valid
is_valid = False
while not is_valid:
item = input("Enter element to be inserted:")
try:
item = int(item)
except ValueError:
print("Invalid!")
else:
is_valid = True
ind = bisect.bisect(m, item)
bisect.insort(m, item)
print("Item inserted at index:", ind)
print("List after insertion:", m)
请注意 input()
总是得到一个 str
而 int('5.0')
也会抛出一个 ValueError
,如果你也想处理这种情况,请使用两个 try
s,例如:
import bisect
m = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print("The list is:", m)
is_valid = False
while not is_valid:
item = input("Enter element to be inserted:")
try:
item = int(item)
except ValueError:
try:
item = int(round(float(item)))
# or just: item = float(item) -- depends on what you want
except ValueError:
print("Invalid!")
else:
is_valid = True
else:
is_valid = True
ind = bisect.bisect(m, item)
bisect.insort(m, item)
print("Item inserted at index:", ind)
print("List after insertion:", m)
我正在尝试使用 input()
以及 Python 中 bisect
模块的 bisect()
和 insort()
函数将元素插入到线性列表中3.7.为了只接受整数输入,我尝试添加一个 try-except 子句(如对
import bisect
m=[0,1,2,3,4,5,6,7,8,9]
print("The list is:", m)
item=input("Enter element to be inserted:")
try:
item=int(item)
except ValueError:
print("Invalid!")
ind=bisect.bisect(m, item)
bisect.insort(m, item)
print("Item inserted at index:", ind)
print("List after insertion:", m)
我希望 Python 在输入浮点数时捕获异常,但它忽略了 try-except 子句并显示如下:
ind=bisect.bisect(m, item) TypeError: '<' not supported between instances of 'str' and 'int'
可能是什么问题?
编辑:
将 except ValueError
更改为 except TypeError
并输入“5.0”时,我收到了 ValueError:
item=int(item) ValueError: invalid literal for int() with base 10: '5.0'
问题是,当您使用 try
/except
子句捕获错误时,您没有做任何事情来确保 item
实际上是 int
.
更合理的做法是循环直到输入可以转换为int
,例如:
import bisect
m = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print("The list is:", m)
# : loop until the input is actually valid
is_valid = False
while not is_valid:
item = input("Enter element to be inserted:")
try:
item = int(item)
except ValueError:
print("Invalid!")
else:
is_valid = True
ind = bisect.bisect(m, item)
bisect.insort(m, item)
print("Item inserted at index:", ind)
print("List after insertion:", m)
请注意 input()
总是得到一个 str
而 int('5.0')
也会抛出一个 ValueError
,如果你也想处理这种情况,请使用两个 try
s,例如:
import bisect
m = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print("The list is:", m)
is_valid = False
while not is_valid:
item = input("Enter element to be inserted:")
try:
item = int(item)
except ValueError:
try:
item = int(round(float(item)))
# or just: item = float(item) -- depends on what you want
except ValueError:
print("Invalid!")
else:
is_valid = True
else:
is_valid = True
ind = bisect.bisect(m, item)
bisect.insort(m, item)
print("Item inserted at index:", ind)
print("List after insertion:", m)