我正在使用python,我有这个功能:
c=15
def glteme(imgt):
for a in range(0,80):
for b in range(0,80):
if (imgt[a,b,0]==0 and imgt[a,b,1]==0 and imgt[a,b,2]==0):
c=1
return a,b,c
(我正在处理80x80的图像,在这2个for循环中,我正在浏览图像的每个像素并尝试找到第一个黑色像素)。所以,在这个if condition
我正在检查是否像素图像是黑色的,如果是,则glteme(imgt)
应返回a,b,c
。然后,我尝试在代码中使用c
访问glteme(imgt)[2]
:
if glteme(imgt)[2]==1:
...
当函数返回a,b,c
时,它可以访问c
,但我不知道如何检查函数是否可以访问不存在的c
?(如果在上面的函数中,代码永远不会进入c
条件,那么if
并不存在)我尝试了if glteme(imgt)[2]==False
,if glteme(imgt)[2] is not True
等等,但它是&#39 ; s不工作..(我收到错误'NoneType' object has no attribute '__getitem__'
)提前谢谢!
答案 0 :(得分:0)
如果我理解你的问题,你的问题是在图像中没有黑色像素时检测条件。在放置函数时,在这种情况下不会返回任何返回值。
更改函数以返回监护人返回值,表示未找到黑色像素,并在返回时检查:
c=15
def glteme(imgt):
for a in range(0,80):
for b in range(0,80):
if (imgt[a,b,0]==0 and imgt[a,b,1]==0 and imgt[a,b,2]==0):
c=1
return a,b,c
return None # This tells to the caller no result was found
稍后调用此函数时,请检查None并采取相应措施:
res = glteme(imgt)
if res is None:
# ... no black pixel was found
else:
# ... do whatever with res, it will contain a, b, c
答案 1 :(得分:0)
你可以捕捉到这些例外情况,而且它通常是一种很好的做法而不是测试,如果'返回的值是可用的:
try :
a = glteme(imgt)[0]
b = glteme(imgt)[1]
c = glteme(imgt)[2]
# do what you want with a,b,c
print(a, b, c)
except AttributeError as e:
# this is where you don't get a,b and c
print('no result')
答案 2 :(得分:0)
try / except块优于if / else。 这个概念被称为“请求宽恕而非许可”
Python社区使用EAFP(更容易请求宽恕而不是 许可)编码风格。这种编码风格假设需要 存在变量,文件等。任何问题都被视为例外。 这导致通常清洁和简洁的风格包含很多 尝试和除了陈述。