我在python中有try-except块,我想在发生异常时什么都不做.我的代码如下:
for i in range(len(grid)):
for j in range(len(grid[i])):
try:
count = count > int(grid[i][j]) ? count : int(grid[i][j])
except:
//Do nothing here
Run Code Online (Sandbox Code Playgroud)
如果发现异常,我该怎么办?
谢谢.
这是一个一般的,最佳实践问题.以下哪个try-except示例更好(函数本身是requests.get()的简单包装器):
def get(self, url, params=params):
try:
response = {}
response = requests.get(url, params=params)
except requests.ConnectionError,e:
log.exception(e)
finally:
return response
Run Code Online (Sandbox Code Playgroud)
要么
def get(self, url, params=params):
try:
return requests.get(url, params=params)
except requests.ConnectionError,e:
log.exception(e)
return {}
Run Code Online (Sandbox Code Playgroud)
或许两者都不是最理想的?我似乎经常为错误记录编写这些包装函数,并且想知道最恐怖的方式.对此有任何建议将不胜感激.
背景:我的入门教材中的一个"手指练习"让我尝试编写这样的程序来教我如何使用try-except块.该教科书的设计是为了配合麻省理工学院MOOC的edX上的"6.00x"课程.这不是在线课程本身的一部分,而只是让我理解try-excpet块的一些练习.
到目前为止,这是我的代码:
def sumDigits(s):
'''Assumes s is a string
Returns the sum of the decimal digits in s
For example, if is is 'a2b3c' it returns 5'''
try:
digitsum = 0
for i in s:
digitsum += int(i)
except TypeError:
return 'You have hit a TypeError'
except ValueError:
return 'You have hit a ValueError'
return digitsum
Run Code Online (Sandbox Code Playgroud)
所以,我遇到的问题是知道将什么内容放入except子句中.我放入两个除了子句的文本是因为我只是希望我的程序运行.我假设解释器经历了一个像'456ab'的字符串,命中'a',然后打印出我告诉它返回的文本,当它不可避免地遇到ValueError时.如何让它"忽略"字符串中的字母字符,只是使用字符串中的数字,所有这些都在try-except块的上下文中?
所以,我在编程练习中遇到了障碍.我理解try的概念,但是我怎么能使用try除了handler只接受一个浮点数或十进制数,如果输入一个整数或整数,它会抛出一条错误信息.我在理论上知道它不可能但是有办法吗?
理想情况下,我想使用try代码块,因为这是我当前的课程.
感谢所有提前!
这是退出功能,我想在try除了块之外运行它..
def quit_function(quit):
if(quit=="quit"):
sys.exit(1)
Run Code Online (Sandbox Code Playgroud)
当我输入正确的输入它工作function_one但是当我写"退出"以退出程序quit_function不起作用时,除了部分工作所以输出是"无效输入"..我该如何解决?
while True:
try:
a=raw_input("Enter input :").lower()
function_one(a)
quit_function(a)
except:
print "invalid input"
else:
break
Run Code Online (Sandbox Code Playgroud) 目标:我有几行代码,每行都能产生相同类型的错误,并保证同样的响应.如何使用try-except块防止"不要重复"问题.
背景:
我使用ReGex从文本文件中抓取格式不佳的数据,并将其输入到自定义对象的字段中.代码工作得很好,除非字段留空,在这种情况下它会抛出错误.
我在try-except块中处理此错误.如果出错,请在对象的字段中插入一个空白(即'').
问题是它变得易于阅读,很好,Python代码变成了一堆乱七八糟的块,每个块都做同样的事情.这是一个'不要重复自己'(又名DRY)违规行为.
代码:
之前:
sample.thickness = find_field('Thickness', sample_datum)[0]
sample.max_tension = find_field('Maximum Load', sample_datum)[0]
sample.max_length = find_field('Maximum Extension', sample_datum)[0]
sample.test_type = sample_test
Run Code Online (Sandbox Code Playgroud)
后:
try:
sample.thickness = find_field('Thickness', sample_datum)[0]
except:
sample.thickness = ''
try:
sample.max_tension = find_field('Maximum Load', sample_datum)[0]
except:
sample.max_tension = ''
try:
sample.max_length = find_field('Maximum Extension', sample_datum)[0]
except:
sample.max_length = ''
try:
sample.test_type = sample_test
except:
sample.test_type = ''
Run Code Online (Sandbox Code Playgroud)
我需要的:
是否有一些Pythonic方式来写这个?如果在任何这些行上存在索引超出范围的错误(表示该字段为空,并且ReGex未能返回任何内容),我可以说一些块,在示例字段中插入一个空白.
open通过加薪进行FileNotFoundError模拟测试AttributeError: __exit__。为什么会发生这种情况以及我可以采取什么措施来解决它?
以下代码打开一个简单的文本文件。如果文件丢失,它会生成一个默认值。它已经通过定期运行进行了检查,并且看起来运行良好。
so_main.py
import os
import so_config
def load_savelocation():
path = os.path.join(so_config.ROOT, so_config.SAVELOCATION_FN)
savelocation_path = os.path.normpath(path)
try:
with open(savelocation_path) as f:
so_config.SAVELOCATION_PATH = f.readline()
except FileNotFoundError:
so_config.SAVELOCATION_PATH = so_config.ROOT
Run Code Online (Sandbox Code Playgroud)
so_config.py
import os
ROOT, _ = os.path.split(__file__)
SAVELOCATION_PATH = None
SAVELOCATION_FN = 'savelocation.ini'
Run Code Online (Sandbox Code Playgroud)
单元测试则是另一回事。我嘲笑了open中的命令so.main。test_so_main.py有两项测试:一项用于正常打开存在的文件,第二项用于测试处理FileNotFoundError。
常规文件打开的第一次测试test_read_path_from_disk_file_into_config_py工作正常。
FileNotFoundError第二个测试失败,因为AttributeError: __exit__. 我可以设置self.mock_open.return_value为FileNotFoundError或我可以将其设置为'garbage'。这没有什么区别。
测试so_main.py
import unittest
import unittest.mock as mock
import …Run Code Online (Sandbox Code Playgroud) 我正在使用该wikipedia库,并且想将其DisambiguationError作为异常处理。我的第一次尝试是
try:
wikipedia.page('equipment') # could be any ambiguous term
except DisambiguationError:
pass
Run Code Online (Sandbox Code Playgroud)
在执行期间,未到达第 3 行。一个更普遍的问题是:如何找到这样的特定于库的类的错误类型?
如何最好地处理调用层次结构中引发异常的多个级别的方法,以便如果是致命错误,程序将退出(显示错误对话框后)?
我基本上来自 Java。在那里我简单地将任何方法声明为throws Exception,重新抛出它并在顶层的某个地方捕获它。
然而,Python 不同。我的 Python 代码基本上如下所示。
编辑:添加了更简单的代码......
主入口函数( plugin.py):
def main(catalog):
print "Executing main(catalog)... "
# instantiate generator
gen = JpaAnnotatedClassGenerator(options)
# run generator
try:
gen.generate_bar() # doesn't bubble up
except ValueError as error:
Utilities.show_error("Error", error.message, "OK", "", "")
return
... usually do the real work here if no error
Run Code Online (Sandbox Code Playgroud)
JpaAnnotatedClassGenerator班级 (engine.py):
class JpaAnnotatedClassGenerator:
def generate_bar(self):
self.generate_value_error()
def generate_value_error(self):
raise ValueError("generate_value_error() raised an error!")
Run Code Online (Sandbox Code Playgroud)
我想返回给调用者一个异常,该异常将被抛出回该调用,直到它到达最外层try-except以显示带有异常消息的错误对话框。
问题:如何在 Python 中最好地完成此操作?我真的必须 …
任务1
编写一个脚本,从 STDIN 读取字符串,如果字符串超过 10 个字符,则引发 ValueError 异常,否则打印读取的字符串。
我这样写代码
a = input("Enter a string")
if(len(a) > 10):
raise ValueError
else:
print(a)
Run Code Online (Sandbox Code Playgroud)
任务2
使用
try ... except子句。打印 except 块内的错误消息。
我现在对如何使用try-except这里感到困惑,因为要打印except块中的任何消息,程序必须在try块中失败。
我的输入将是PythonIsAmazing
try-except ×10
python ×9
python-3.x ×2
string ×2
exception ×1
function ×1
mocking ×1
python-2.7 ×1
pywikibot ×1
syntax ×1
valueerror ×1