gpt4 book ai didi

python - 什么在尝试 : exit early?

转载 作者:行者123 更新时间:2023-11-28 22:06:07 28 4
gpt4 key购买 nike

在下面的函数中,是什么让 try: 提前退出?如果我将相同的代码放在 def block 之外,它就可以正常工作。

tiles = ['095D', '094M']
in_file = 'in_file'
out_file = 'out_file'
expression = ''' "FIELDNAME" LIKE 'STUFF' '''

def foobar(in_file, out_file, expression):
print in_file, out_file, expression
try:
print 'this is trying'
#pretty print tile list, from http://stackoverflow.com/questions/2399112/python-print-delimited-list
tiles = ','.join(map(str,tiles))
print 'made it past tiles!'
print 'From %s \nselecting %s \ninto %s' % (in_file, tiles, out_file)

except:
print 'Made it to the except block!'

foobar(in_file, out_file, expression)

结果:

D:\> python xx-debug.py
in_file out_file "FIELDNAME" LIKE 'STUFF'
this is trying
Made it to the except block!

same code not in a def 的结果:

this is trying
made it past tiles!
From in_file
selecting 095D,094M
into out_file

最佳答案

它不起作用的原因是因为您在全局范围内定义了 tiles。在您分配给 tiles 的函数中。这使得 tiles 成为函数中的局部范围名称。反过来,这意味着函数中的代码根本不会在全局范围内查找 tiles

在分配中,您试图获取 tiles(这是在它被本地分配之前。)这会导致异常被引发,因为您尝试访问未分配的局部变量。

快速修复是使用global:

...
def foobar(in_file, out_file, expression):
global tiles
...

正如其他人所说,不要只捕获异常而不对其进行处理。调试代码时,您希望抛出异常以便找到并修复原因!要么删除 try...except,要么让 except 接受异常并打印有关它的有用信息,如下所示:

try:
...
except Exception, e:
print 'Oh noes!', e

这可能需要阅读很多内容,但是如果您阅读它,您会更好地理解 Python:

http://docs.python.org/reference/executionmodel.html

它解释了 Python 如何处理模块范围和函数范围内的变量定义等。它还涵盖了异常。

关于python - 什么在尝试 : exit early?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4262609/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com