检查哪个变量抛出异常
Checking which variable threw exception
有没有办法检查哪个变量赋值方法抛出异常?例如:
a = '\xa1'
b = 'normal string'
try:
c = b.encode('ascii')
d = a.encode('ascii')
except Exception as e:
print "error thrown for input: %s" % <figure out which variable threw error>
在这种情况下,我希望输出显示 "error thrown for input: d" 而如果我切换变量以便 c = a.encode('ascii') 那么输出将显示 "error thrown for input: c"。这是可能的还是我需要将变量赋值分成两个不同的 try 块?
另外,出于好奇,我们假设有 5 个、10 个或更多的变量不容易用 for 循环迭代。那会是 5-10 个不同的 try 块吗?或者你会把它们堆成一个列表只是为了一个 for 循环吗?
变量从不抛出异常。调用 方法 encode
时抛出异常。
如果您想知道是什么引发了异常,请将每个 encode
调用包装在一个单独的 try/except
块中。
你也可以看看 e
:
except Exception as e:
print(e)
\xa1
的输出是:
'ascii' codec can't encode character '\xa1' in position 0: ordinal not in range(128)
你会看到有问题的输入。
编辑:
您还可以查看 e.args
,其中 \xa1
是:
('ascii', '¡', 0, 1, 'ordinal not in range(128)')
所以 e.args[1]
是有问题的输入。
注意:孩子们不要在家里尝试这个,可读性很重要
a = '\xa1'
b = 'normal string'
z = 0
try:
c = b.encode('ascii')
z = 1
d = a.encode('ascii')
except Exception as e:
print "error thrown for variable %s" % (a if z else b)
你可以创建一个临时变量,我们称它为z,将其设置为0,如果b变量没有发生异常则将z更改为1,最后检查z == 1,如果是,然后第二个变量中的encode方法抛出异常,如果没有则第一个变量中的encode方法抛出异常,我认为这段代码运行良好,但我没有测试它
您可以使用 traceback 模块获取更多信息:
a = '\xa1'
b = 'normal string'
import sys, traceback
try:
c = b.encode('ascii')
d = a.encode('ascii')
except Exception as e:
exc_type, exc_value, exc_traceback = sys.exc_info()
traceback.print_tb(exc_traceback)
File "/.............py", line 65, in <module>
d = a.encode('ascii')
traceback.print_tb(exc_traceback)
给你行号和有问题的变量。
获取原因:
print("Reason: {}".format(e.reason))
Reason: ordinal not in range(128)
有没有办法检查哪个变量赋值方法抛出异常?例如:
a = '\xa1'
b = 'normal string'
try:
c = b.encode('ascii')
d = a.encode('ascii')
except Exception as e:
print "error thrown for input: %s" % <figure out which variable threw error>
在这种情况下,我希望输出显示 "error thrown for input: d" 而如果我切换变量以便 c = a.encode('ascii') 那么输出将显示 "error thrown for input: c"。这是可能的还是我需要将变量赋值分成两个不同的 try 块?
另外,出于好奇,我们假设有 5 个、10 个或更多的变量不容易用 for 循环迭代。那会是 5-10 个不同的 try 块吗?或者你会把它们堆成一个列表只是为了一个 for 循环吗?
变量从不抛出异常。调用 方法 encode
时抛出异常。
如果您想知道是什么引发了异常,请将每个 encode
调用包装在一个单独的 try/except
块中。
你也可以看看 e
:
except Exception as e:
print(e)
\xa1
的输出是:
'ascii' codec can't encode character '\xa1' in position 0: ordinal not in range(128)
你会看到有问题的输入。
编辑:
您还可以查看 e.args
,其中 \xa1
是:
('ascii', '¡', 0, 1, 'ordinal not in range(128)')
所以 e.args[1]
是有问题的输入。
注意:孩子们不要在家里尝试这个,可读性很重要
a = '\xa1'
b = 'normal string'
z = 0
try:
c = b.encode('ascii')
z = 1
d = a.encode('ascii')
except Exception as e:
print "error thrown for variable %s" % (a if z else b)
你可以创建一个临时变量,我们称它为z,将其设置为0,如果b变量没有发生异常则将z更改为1,最后检查z == 1,如果是,然后第二个变量中的encode方法抛出异常,如果没有则第一个变量中的encode方法抛出异常,我认为这段代码运行良好,但我没有测试它
您可以使用 traceback 模块获取更多信息:
a = '\xa1'
b = 'normal string'
import sys, traceback
try:
c = b.encode('ascii')
d = a.encode('ascii')
except Exception as e:
exc_type, exc_value, exc_traceback = sys.exc_info()
traceback.print_tb(exc_traceback)
File "/.............py", line 65, in <module>
d = a.encode('ascii')
traceback.print_tb(exc_traceback)
给你行号和有问题的变量。
获取原因:
print("Reason: {}".format(e.reason))
Reason: ordinal not in range(128)